Прошу хороших людей помочь

  • Автор темы Talisman
  • Дата начала

Talisman

New member
Подскажите плиз, как сделать чтобы вывод заявки в текстовый
файл записывался сразу как только поступил сигнал (внутри бара)?


Допустим есть стратегия (внутрибарная):

buy next bar highest(h,10) or higher;

sell next bar lowest(l,10) or lower;



и вот сам вывод в файл (в инете нашел):



input:CLIENT_CODE(...),Lot(...),interwal(60);
vars:Contrakt(0),Positions(0);

if CurrentTime>1045 then begin
filedelete("C:\omega\orders\quik.txt");
end;

if MarketPosition=1 and BarInterval=interwal then
begin
Positions=1;
Contrakt=CurrentContracts/Lot;
FileAppend("C:\omega\orders\quik.txt", "ACCOUNT=L01-00000F00"+";CLIENT_CODE="+NumToStr(CLIENT_CODE,0)+";TYPE=L;"+"TRANS_ID="+NumToStr(EntryTime/100,0)+
NumToStr(EntryDate(1),0)+";CLASSCODE=EQBR;"+"SECCODE="+GetSymbolName+ ";ACTION=NEW_ORDER;"+"OPERATION=B;"+"PRICE="+NumToStr(EntryPrice,3)+
";QUANTITY="+NumToStr(Contrakt,0));
end;

if MarketPosition=0 and BarInterval=interwal and Positions=1 then
begin
FileAppend("C:\omega\orders\quik.txt", "ACCOUNT=L01-00000F00"+";CLIENT_CODE="+NumToStr(CLIENT_CODE,0)+";TYPE=L;"+"TRANS_ID="+NumToStr(ExitTime(1)/100,0)+
NumToStr(ExitDate(1),0)+";CLASSCODE=EQBR;"+"SECCODE="+GetSymbolName+ ";ACTION=NEW_ORDER;"+"OPERATION=S;"+"PRICE="+NumToStr(ExitPrice(1),3)+
";QUANTITY="+NumToStr(Contrakt,0));
end;

if MarketPosition=-1 and BarInterval=interwal then
begin
Positions=-1;
Contrakt=CurrentContracts/Lot;
FileAppend("C:\omega\orders\quik.txt", "ACCOUNT=L01-00000F00"+";CLIENT_CODE="+NumToStr(CLIENT_CODE,0)+";TYPE=L;"+"TRANS_ID="+NumToStr(EntryTime(1)/100,0)+
NumToStr(EntryDate(1),0)+";CLASSCODE=EQBR;"+"SECCODE="+GetSymbolName+ ";ACTION=NEW_ORDER;"+"OPERATION=S;"+"PRICE="+NumToStr(EntryPrice,3)+
";QUANTITY="+NumToStr(Contrakt,0));
end;

if MarketPosition=0 and BarInterval=interwal and Positions=-1 then
begin
FileAppend("C:\omega\orders\quik.txt", "ACCOUNT=L01-00000F00"+";CLIENT_CODE="+NumToStr(CLIENT_CODE,0)+";TYPE=L;"+"TRANS_ID="+NumToStr(ExitTime(1)/100,0)+
NumToStr(ExitDate(1),0)+";CLASSCODE=EQBR;"+"SECCODE="+GetSymbolName+ ";ACTION=NEW_ORDER;"+"OPERATION=B;"+"PRICE="+NumToStr(ExitPrice(1),3)+
";QUANTITY="+NumToStr(Contrakt,0));
end;

if Currentbar>1 then
begin
FileAppend("C:\omega\orders\quik.txt","");
end;
 

Talisman

New member
Ну есть здесь толковые люди ?
(вопрос то не сильно сложный или в омеге никто вообще не разбирается)
 

Talisman

New member
Видимо здесь нет специалистов в этой сфере, или секрет настолько важен, что все боятся его рассказать.

Других причин быть не может.

(знал бы не писал)
 

Juveman

New member
Я правильно понимаю, что смысл стратегии заключается в том, чтобы купить в случае пробоя цены максимального значения за несколько предыдущих баров?
 

Dimus

New member
Видимо здесь нет специалистов в этой сфере, или секрет настолько важен, что все боятся его рассказать.

Других причин быть не может.

(знал бы не писал)
Повидимому по Омеге народу здесь мало. Пиши свой вопрос на пауке, может там помогут.
 

Juveman

New member
у тебя сама омега не генерирует приказы внутри бара? или генерирует, но не пишет в файл?
Если дело в первом, то тебе в описании самой стратегии нужно написать вместо твоих строк следующие:

buy next bar at highest(h,10) Stop;

sell next bar at lowest(l,10) Stop;

Попробуй так и отпишись, что измениллось.
 

Talisman

New member
с омегой все впорядке, тут проблемка в другом

у тебя сама омега не генерирует приказы внутри бара? или генерирует, но не пишет в файл?
Если дело в первом, то тебе в описании самой стратегии нужно написать вместо твоих строк следующие:

buy next bar at highest(h,10) Stop;
sell next bar at lowest(l,10) Stop;

Попробуй так и отпишись, что измениллось.

Пробовал ставить в конце стратегии слова и Stop и Limit, но тут вот что:

Омега генерирует внутри бара (к ней претензий нет) но вот
текстовый файл создается почему-то только после закрытия текущего бара. Похоже сам вывод кода (quik.ela) построен на закрытии бара поэтому не сразу выводит.

Вот и спрашиваю что изменить в коде вывода или дописать, чтобы сразу перехватывало сигнал и создавало текстовый внутри бара?

(Надеюсь точно описал)
 

Juveman

New member
насколько я понимаю, это невозможно, так как омега прочитывает код стратегии только с появлением нового бара. Соответственно, пока он не появится, код стратегии не будет заново прочтен и не будет записан результат обработки в файл.
Однако, в большинстве случаев этого и не нужно делать.
Применительно к твоей стратегии нужно просто в самом выводе в файл поменять параметр ACTION=NEW_ORDER на ACTION=NEW_STOP_ORDER, а также дописать туда цену условия исполнения заявки (посмотри документацию к квику на тему генерации стоп-заявок из tri-файла).
Этим ты не добьешься того, что омега начнет записывать сигнал в файл посреди бара, но зато в начале этого бара твоя заявка будет введена в квик еще задолго до достижения ценой уровня покупки и автоматически исполнится, как цена ее достигнет, что совпадет с появлением сигнала на покупку в омеге. Чего и требовалось достичь.
 

Talisman

New member
буду проверять

Хорошо, спасибо за подробные объяснения.

Завтра буду пробовать, если получится напишу (как именно).

С уважением.
 

Talisman

New member
проверил, но похоже...

Пробовал менять параметр ACTION=NEW_ORDER на ACTION=NEW_STOP_ORDER, смотрел документацию к квику на тему генерации стоп-заявок из tri-файла.

но заявка создается только после закрытия бара.


Кстати что вы имеете ввиду насчет:

...но зато в начале этого бара твоя заявка будет введена в квик еще задолго до достижения ценой уровня покупки и автоматически исполнится, как цена ее достигнет, что совпадет с появлением сигнала на покупку в омеге. Чего и требовалось достичь.

как понимать (слово задолго, ведь заявка после сигнала только идет)?


P.S.
А вообще я понял, что сделать мгновенный вывод заявок в квик из омеги (непосредствено через код изи) очень и очень непросто, если это вообще возможно. И похоже что я первый кто пытается таким путем сделать внутрибарный экспорт!

С уважением.
 

Juveman

New member
Re: проверил, но похоже...

Пробовал менять параметр ACTION=NEW_ORDER на ACTION=NEW_STOP_ORDER, смотрел документацию к квику на тему генерации стоп-заявок из tri-файла.

но заявка создается только после закрытия бара.


Кстати что вы имеете ввиду насчет:

...но зато в начале этого бара твоя заявка будет введена в квик еще задолго до достижения ценой уровня покупки и автоматически исполнится, как цена ее достигнет, что совпадет с появлением сигнала на покупку в омеге. Чего и требовалось достичь.

как понимать (слово задолго, ведь заявка после сигнала только идет)?


P.S.
А вообще я понял, что сделать мгновенный вывод заявок в квик из омеги (непосредствено через код изи) очень и очень непросто, если это вообще возможно. И похоже что я первый кто пытается таким путем сделать внутрибарный экспорт!

С уважением.
не первый..

твоя проблема решается примерно следующим образом:

buy next bar at highest(h,10) Stop;

FileAppend("C:\omega\orders\quik.txt", "ACCOUNT=L01-00000F00"+";CLIENT_CODE="+NumToStr(CLIENT_CODE,0)+";TYPE=L;"+"TRANS_ID="+NumToStr(EntryTime/100,0)+
NumToStr(EntryDate(1),0)+";CLASSCODE=EQBR;"+"SECCODE="+GetSymbolName+ ";ACTION=NEW_STOP_ORDER;"+"OPERATION=B;"+"PRICE="+NumToStr(EntryPrice,3)+
";QUANTITY="+NumToStr(Contrakt,0));

sell next bar at lowest(l,10) Stop;

FileAppend("C:\omega\orders\quik.txt", "ACCOUNT=L01-00000F00"+";CLIENT_CODE="+NumToStr(CLIENT_CODE,0)+";TYPE=L;"+"TRANS_ID="+NumToStr(EntryTime/100,0)+
NumToStr(EntryDate(1),0)+";CLASSCODE=EQBR;"+"SECCODE="+GetSymbolName+ ";ACTION=NEW_STOP_ORDER;"+"OPERATION=S;"+"PRICE="+NumToStr(EntryPrice,3)+
";QUANTITY="+NumToStr(Contrakt,0));

То есть практически тебе при такой стратегии нужно убрать условия
if MarketPosition=...
 

Talisman

New member
Re: проверил, но похоже...

спасибо, буду думать в этом направлении.
и что

не первый..

тоже радует.


но при таком варианте записывает все сделки в текстовый файл разом!
(а нужно то по одной, поочередно, видимо тут нужен фильтр если в рынке то одно, а если вне то другое, как грамотно вписать, чтобы не испортить все дело)?



С уважением.
 

Talisman

New member
Re: проверил, но похоже...

имею ввиду что в этом варианте все сделки записываются поочереди, и что в коде quik export это решалось путем этих строчек:

if CurrentTime>1045 then begin
filedelete("C:\omega\orders\quik.txt");
end;


и


if MarketPosition=1 then
begin и сам вывод.


Но в них я так понял сама загвоздка исполнения (завязано на времени)



Прошу Вас помочь мне в последний раз, (как сделать иначе, чтобы в файле создавался одна заявка) ?

Ну дальше уже сам доковыряю.

Заранее благодарен.
 

Juveman

New member
если тебе нужно, чтобы у тебя всегда в файле была только запись с одним последним сигналом (я правильнон понял?), то делается это очень просто.

достаточно перед функцией FileAppend вставить функцию очистки файла. Этого будет достаточно.
Однако применительно именно к твоей стратегии у тебя все равно будет одновременно оставаться каждый раз 2 записи о 2 сигналах: один на покупку и один на продажу.
 

Talisman

New member
просьба

А вы бы не могли в личку вкратце написать пример хотя бы в одну сторону (Саму суть)., а то я и в начале вставлял и в конце, но где-то ошибки допускаю, результаты неправильные выходят, да и замучался, если честно. Но очень хочу разобраться (в омеге пока не силен).


С уважением.
 

Talisman

New member
только пришел

кстати ошибки в чем? в коде омеги? или квик не принимает сгенерированные строчки?

Там получается что все сделки записываются поочериде.
То есть на графике было 50 сделок, вот все и х и записывает в этом случае. А нужно то по одной чтобы поочереди шли (удаляя прошлые перед тем, как появляются новые)
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху