Автор |
Сообщение |
Maxigeon
Зарегистрирован: 20.07.2010
Сообщения: 3
Откуда: Ухта
|
Необходимо написать систему которая торгует портфелем и ориентируется на свободный КЭШ на текущий момент. Или, если по другому, как сделать так, чтобы когда Амиброкер работая в связке с квиком не посылал сигналы портфельной системы на покупку или открытия шорта, если она уже затарилась на все 100% . Как сделать это, подскажите??? |
_________________ кто сказал что трейдинг -путь к финансовой свободе... Пусть займет денег, чтоб стать посвободнее |
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Похоже только один способ. Написать заумный код который все это будет учитывать.
Портфель Ами считает только портфельным тестером. Если робот работает как индикатор, то из индикатора портфельный тестер никак не запустить, Если робот из АА, то опять таки ни Scan ни Explore портфельный тестер не используют.
Как вариант можно попытаться сделать обратную связь с терминалом чтобы робот смотрел доступные деньги. В таком варианте косяк в том, что если терминал тормознул и не вовремя показал уменьшение свободных средств, то возможны неприятные косяки.
Проще всего тупо считать открытые позиции и соответственно доступные средства в коде. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Maxigeon
Зарегистрирован: 20.07.2010
Сообщения: 3
Откуда: Ухта
|
000 писал(а): |
Проще всего тупо считать открытые позиции и соответственно доступные средства в коде. |
спасибо - попробую. Вот только как то сложно я это представляю |
_________________ кто сказал что трейдинг -путь к финансовой свободе... Пусть займет денег, чтоб стать посвободнее |
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
вечерком подробнее опишу этот вариант. Если не занят буду. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Maxigeon
Зарегистрирован: 20.07.2010
Сообщения: 3
Откуда: Ухта
|
000 писал(а): |
вечерком подробнее опишу этот вариант. Если не занят буду. |
спасибо. должен буду. |
_________________ кто сказал что трейдинг -путь к финансовой свободе... Пусть займет денег, чтоб стать посвободнее |
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну вот. Видишь, времени не было. Сегодня тоже точно не получится. Жди воскресенья... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот. Вроде должно работать. Только я не проверял.
В двух словах
В настройки добавилась переменная money. Сколько денег на брокерском счету.
Добавились 2 функции
ReadFile()
WriteFile()
Они пишут и чатают файл linked.money который будет создан автоматически в каталоге куда установлен Ами. В этом файле сумма связанных денег. При необходимости его содержимое можно править просто блокнотом.
При открытии длинной или короткой позиции наличие свободных средст на неё определяется
(money - linkedMoney) > LastValue(C)*1.1*Lots)
Используется коэфициент 1,1 на всякий случай.
При вызове функции makeandsave добавился еще один (третий) параметр. если 1 то деньги связываются, если -1 то освобождаются.
функция savetrifile когда записывает транзакцию в tri вычисляет и записывает связанные деньги в файл linked.money вызывая функцию WriteFile. Связывается немного больше денег чем надо на всякий случай. Коэффициент 1,05
Код: |
///////// Установки ///////////
TimeFrame = 60; // таймфрейм в секундах.
Account = "L01-00000F00"; // ваш аккаунт на бирже
Client = "49501"; // код клиента
Lots = 1; // сколько лотов желаете торговать
Otstup = 2; // в процентах. Заявка будет выставлена хуже текущей цены на столько процентов
FileName = "C:/Program Files/Quick/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
money = 100000; // денег для торговли
dir = 0;
////////// Функции //////////
function ReadFile() {
fh = fopen( "linked.money", "r");
if( fh ) {
p = fgets( fh );
p = StrToNum(p);
}
else {
fh = fopen( "linked.money", "w");
fputs( "0", fh);
p = 0;
}
fclose( fh );
return p;
}
procedure WriteFile( q ) {
fh = fopen( "linked.money", "w");
fputs( NumToStr( q, 1.0, False ), fh);
fclose( fh );
}
linkedMoney = ReadFile();
////////// Правила системы ///////////////
Buy = Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);
Short = Sell;
Cover = Buy;
//////////////////////////////////////////
Equity(1, 0);
Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(Ref(Cover, -1));
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
if(TickSize == 0)
{
PopupWindow( "Не задан размер тика значение TickSize", "ошибка", timeout = 5, left = -1, top = -1 );
}
else
{
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
form = (1 + 0.1 * abs(floor(IIf(log10(TickSize)>0, 0, log10(TickSize)))));
}
procedure savetrifile(stransid, sstr, qqq)
{
f = fopen(FileName, "r");
found = 0;
if(f)
{
while(!feof(f))
{
s = fgets(f);
if(StrFind( s, stransid) > 0) found = 1;
}
fclose(f);
}
if (NOT found)
{
f = fopen(FileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
WriteFile( qqq * LastValue(C)*1.05*Lots + linkedMoney);
}
}
}
function makeandsave(sOper, sprice, qq)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+dir+"; ";
str = transid +
"PRICE=" + NumToStr(sprice, format = form, separator=False)+"; " +
"QUANTITY=" + NumToStr(Lots, format = 1.0, separator=False)+"; " +
"OPERATION=" + sOper+"; " +
"CLASSCODE=" + Classcode+"; " +
"ACTION=" + "NEW_ORDER; " +
"TYPE=" + "L; " +
"SECCODE=" + Name()+"; " +
"ACCOUNT=" + Account+"; " +
CCS;
savetrifile(transid, str, qq);
}
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy AND (money - linkedMoney) > LastValue(C)*1.1*Lots);
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price, 1);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
dir = "2";
makeandsave("S", price, -1);
}
if(Short AND (money - linkedMoney) > LastValue(C)*1.1*Lots)
{
price = Close[BarCount-1] - Otstup;
dir = "3";
makeandsave("S", price, 1);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
dir = "4";
makeandsave("B", price, -1);
}
}
else if (TimeFrame != Interval())
PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
"ошибка", timeout = 5, left = -1, top = -1 );
else
PopupWindow( "Не задан двузначный номер в поле FullName", "ошибка", timeout = 15, left = -1, top = -1 );
//// mehanizator (c) 2004, http://www.russian-trader.ru
//// 000 (c) 2008, http://www.amisite.ru
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|