Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 След. |
Автор |
Сообщение |
Яхфар
Зарегистрирован: 24.04.2011
Сообщения: 74
|
Боюсь что могу некорректно удалить Можешь мне тупо выделить что надо удалить.
Сам код:
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
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)
{
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);
}
}
}
function makeandsave(sOper, sprice)
{
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);
}
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
dir = "2";
makeandsave("S", price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
dir = "3";
makeandsave("S", price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
dir = "4";
makeandsave("B", price);
}
}
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
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Тебе в начале кода надо обязательно правильно инициализировать переменную TickSize.
Далее, удали то что я пометил жирным:
Цитата: |
if (TimeFrame == Interval() & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
dir = "1";
makeandsave("B", price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
dir = "2";
makeandsave("S", price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
dir = "3";
makeandsave("S", price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
dir = "4";
makeandsave("B", price);
}
}
else if (TimeFrame != Interval())
PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
"ошибка", timeout = 5, left = -1, top = -1 );
else
PopupWindow( "Не задан двузначный номер в поле FullName", "ошибка", timeout = 15, left = -1, top = -1 ); |
|
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Яхфар
Зарегистрирован: 24.04.2011
Сообщения: 74
|
TickSize у меня бывает равен 1.... а при ртс равен 5.....т.е. он разный бывает или здесь это не важно.... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Зачем ломаете? Оно же нормально работает (если все правильно сделано). Почему думаете, что я туда что то лишнее запихал? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Яхфар
Зарегистрирован: 24.04.2011
Сообщения: 74
|
Пишет ошибки: не задан двузначный номер в поле Fullname. Не задан размера TickSize. При этом коректно работает, все сделки проходят как надо |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
000 писал(а): |
Зачем ломаете? Оно же нормально работает (если все правильно сделано). Почему думаете, что я туда что то лишнее запихал? |
Ну я предложил 2 варианта - или настроить символы, или удалить эти мессаги и забить, если все работает как надо. Выбрали 2й вариант |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В инструкции написано
Цитата: |
В Information, в поле FullName пишем 01, 02, 03, и т.д. Для каждой бумаги свой номер.
Обязательно заносите в Information значение минимального шага цены (в поле Tick Size)
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Яхфар
Зарегистрирован: 24.04.2011
Сообщения: 74
|
Это всё указано, да и сделки бы не проходили, если бы этого не было. Дело в следующем: я решил протестить робота на две системы:
////////// Правила системы ///////////////
Buy = 0; Sell = 0; Cover = 0; Short = 0;
if(Name() == "SRZ1")
{
Period1 = Optimize("PeriodA", 5, 1, 50, 1);
Period2 = Optimize("PeriodB", 5, 1, 50, 1);
Top = Ref(HHV(C, Period1), -1);
Bot = Ref(LLV(C, Period2), -1);
Buy = Cover= Cross(C, Top);
Sell = Short= Cross(Bot, C);
Lots=2;
}
else if(Name() == "VBZ1")
{
Period3 = Optimize("PeriodAA", 5, 1, 50, 1);
Period4 = Optimize("PeriodBB", 5, 1, 50, 1);
Top = Ref(HHV(C, Period3), -1);
Bot = Ref(LLV(C, Period4), -1);
Buy = Cover= Cross(C, Top);
Sell = Short= Cross(Bot, C);
Lots=1;
}
Он стал после этого выдать сообщения об ошибках. Когда одна система никаких сообщениях об ошибках нету. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Яхфар
Зарегистрирован: 24.04.2011
Сообщения: 74
|
Я вроде понял почему так происходило. В настройках у меня указано - все символы!!!! И поскольку в символах оказались не только указанные две бумаги в коде, но и ещё Equity. То он выдает сообщения об ошибках. И эти сообщения направленны были видимо той бумаге которой не было в коде. Получается, что если в базе данных много бумажек, а в роботе указаны не все, то сообщения об ошибках непременно буду вылезать.
Видимо чтобы избежать этого надо пользоваться фильтром. Буду пробовать |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну вот. Видишь как все просто |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Яхфар
Зарегистрирован: 24.04.2011
Сообщения: 74
|
Возникла следующая простая мысль.!!! У меня есть определенный набор систем и соответственно бумаг к ним. Мне их надо периодически включать и выключать, регулировать количество. Можно это делать напрямую через изменение количество систем в теле робота, при этом одновременно то удаляя, то добавляя символы. Но в этом случае, придется делать много телодвижений и риск человеческой ошибки может повысится. Так вот подумалось, что если сразу забахать, туда куча систем. И по не работающим системам просто ставить нули в лоты. И подчищать соответственно три файлы в квике почаще. Кто нить так работал? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По моему можно просто коментировать ненужные системы или удалять ненужные символы из фильтра АА |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
zxWizard
Зарегистрирован: 25.09.2011
Сообщения: 46
|
Доброго времени суток!
Цель создать робота для закрытия позиции, у меня связка Квик + Амиброкер + TraderExplorer (Привод) позиция открывается ручками а закрываться должна по сигналу Амиброкера в TraderExplorer (Приводом) сама связка программ работает нормально Но для корректной работы системы закрытия Амиброкер должен знать какая позиция открыта и где стоит стоп(который поставил привод) во общем привод с квиком работает через *.trr, *.tro, *.tri файлы и мне нужно tri файл перевести в текстовый массив и проверять новые строки и считывать направление позиции и где стоит стоп(он трейлится приводом).
У вас в роботе есть функция
procedure savetrifile(stransid,sstr)
{
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);
}
}
}
Подскажите пожалуйста
как мне tri файл перевести в массив по сути мне нужно обратное функции savetrifile. Каждая стока tri файла имеет свой TRANS_ID по нему и можно сортировать Ами не давно изучаю пока не все понимаю помогите пожалуйста...
Пример tri файла созданным TraderExplorer (Приводом):
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=19; CLASSCODE=SPBFUT; SECCODE=RIZ1; ACTION=NEW_ORDER; OPERATION=B; PRICE=140000; QUANTITY=1;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=20; CLASSCODE=SPBFUT; SECCODE=RIZ1; ACTION=NEW_STOP_ORDER; STOP_ORDER_KIND=SIMPLE_STOP_ORDER ;OPERATION=S; QUANTITY=1; STOPPRICE=139205; PRICE=138205; EXPIRY_DATE=GTC;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=21; CLASSCODE=SPBFUT; ACTION=KILL_STOP_ORDER; STOP_ORDER_KEY=11476955; SECCODE=RIZ1;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=22; CLASSCODE=SPBFUT; SECCODE=RIZ1; ACTION=NEW_STOP_ORDER; STOP_ORDER_KIND=SIMPLE_STOP_ORDER ;OPERATION=S; QUANTITY=1; STOPPRICE=139420; PRICE=138420; EXPIRY_DATE=GTC;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=23; CLASSCODE=SPBFUT; ACTION=KILL_STOP_ORDER; STOP_ORDER_KEY=11476980; SECCODE=RIZ1;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=24; CLASSCODE=SPBFUT; SECCODE=RIZ1; ACTION=NEW_STOP_ORDER; STOP_ORDER_KIND=SIMPLE_STOP_ORDER ;OPERATION=S; QUANTITY=1; STOPPRICE=139490; PRICE=138490; EXPIRY_DATE=GTC;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TYPE=L; TRANS_ID=25; CLASSCODE=SPBFUT; ACTION=KILL_STOP_ORDER; STOP_ORDER_KEY=11476985; SECCODE=RIZ1;
ACCOUNT=XXXXXXXXXX; CLIENT_CODE=XXXXXXXXXX; TRANS_ID=26; CLASSCODE=SPBFUT; SECCODE=RIZ1; ACTION=KILL_ALL_STOP_ORDERS; |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем ты затеял не легкое дело...
Подскажу в двух словах.
Читать последовательно все строки в текстовом файле можно так.
Код: |
fh = fopen( "...quik.tri ", "r");
if( fh )
{
while( ! feof( fh ) )
{
str = fgets( fh ) ; // строка из файла
}
} |
Когда прочитал строку её надо бы разбить на элементы для анализа. Ами может разбивать на элементы строку разделенную запятыми, а у нас ";".
Поэтому заменим "; " на ","
Код: |
StrReplace(str, "; ", ","); |
Все вместе
Код: |
fh = fopen( "...quik.tri ", "r");
if( fh )
{
while( ! feof( fh ) )
{
str = fgets( fh ) ; // строка из файла
StrReplace(str, "; ", ",");
}
} |
Далее можно брать элементы этой строки для анализа.
Код: |
str1 = StrExtract( str, 1 ); // первый элемент
str2 = StrExtract( str, 2 ); // второй элемент |
Потом ищешь в этих элементах например подстроку PRICE (StrFind( str1, "PRICE" ) ), потом узнаешь позицию знака "=" (pos = StrFind( str1, "=" )) потом берешь оттуда все , что стоит после = (pr = StrRight( str1, pos) ) и превращаешь в число (pr = StrToNum(pr))
.... вот как то так.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
zxWizard
Зарегистрирован: 25.09.2011
Сообщения: 46
|
[quote="000"]В общем ты затеял не легкое дело...
Подскажу в двух словах.
Олег Спасибо! доступно расписал буду пробовать хотя понимаю что не легко, а нет ли где подробного описания параметров tri файла смотрел на форуме квика что то не нашел? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Роботы |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|