Скрипт был как пример, никто и не говорил, что надо его на оффлайн график кидать. Его обычно запускают на обычном графике и указывают ТФ оффлайн графика в строке
И #import "user32.dll" не нужен, он вызывается в WinUser32.mqh
И вообще, есть индикатор "6MTH_Renko_Chart_Builder_Indi_Ver_02.mq4", который умеет эмулировать тики на создаваемом графике Ренко. Он так и работает, индикатор запускают на обычном графике, потом открывают график Ренко, который обновляется в реальном времени.
Есть такой фрагмент кода, он работает. Это сигналы при подходе к торговым уровням. buy1_line - это уровень на графике, buy1 - расстояние цены в пунктах от соответствующего уровня. Дело в том что в коде есть возможность отключать не нужные уровни. В этом случае Значение уровня buy1_line (0.00000) а расстояние - отображается 6-ти значным числом, которое в принципе не имеет смысла. (уровень выключен, знать расстояние не нужно) Вопрос! Как обнулить расстояние до уровня - buy1, если соответствующий уровень выключен? (или в место этой цифры написать OFF ?)
потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу.
потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу.
спасибо!
А и не надо OrderSend(), чтобы узнать тикет уже открытого ордера, его надо выбрать с помощью OrderSelect().
В цикле шерстите все рыночные ордера, выбираете каждый и если совпадает тип, символ и магик, пишете тикет в массив.
Массив потом сортируете по возрастанию. Самое большое значение тикета - самый свежий ордер.
да, наверное так и придется. думал может есть какой-то прием или метод чтоб получить тикет только что посланного ордера. ну раз нету, придется по старинке, а жаль. спасибо!
danik: да, наверное так и придется. думал может есть какой-то прием или метод чтоб получить тикет только что посланного ордера. ну раз нету, придется по старинке, а жаль. спасибо!
Только что открытый будет как вы и написали - ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);
Но это при условии, что заявка была исполнена без ошибок, да и затирается такой тикет быстро.
потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу.
проблема что тикетов этих больше одного. может 4, точно не знаю еще. поэтому создал класс, где будет номер тикета и другая информация, которую не хранит ордерселект. поэтому хотелось иметь доступ по тикету. но пока что в голову приходит только создавать обьекты класса и накидать в CarrayObj а потом доставать по индексу, сравнивать тикет и дальше анализировать. а проблема почему спрашивал - что терялся из-за обработки ошибок. но с тем разобрался, спасибо, сам виноват в другом месте. Господа evillive AlexeyVik - спасибо за оперативные ответы!
проблема что тикетов этих больше одного. может 4, точно не знаю еще. поэтому создал класс, где будет номер тикета и другая информация, которую не хранит ордерселект. поэтому хотелось иметь доступ по тикету. но пока что в голову приходит только создавать обьекты класса и накидать в CarrayObj а потом доставать по индексу, сравнивать тикет и дальше анализировать. а проблема почему спрашивал - что терялся из-за обработки ошибок. но с тем разобрался, спасибо, сам виноват в другом месте. Господа evillive AlexeyVik - спасибо за оперативные ответы!
Здравствуйте! Напишите пожалуйста, почему в тестере стратегий не открывает сделки, пишет в журнале ошибка: (2015.07.13 00:22:39.218 TestGenerator: unmatched data error (high value 1.31150 at 2013.07.11 05:00 is not reached from the least timeframe, high price 1.31140 mismatches) котировки обновлял. Вот код советника:
int ticket;
int init;
int start()
{
int bars0;
int bars1;
int bars2;
int bars3;
int stoploss=50;
int takeprofit=30;
int slipage=2;
//-------------------------------------------------------------------+if ( OrdersTotal()<1 && Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
if ( Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
if(V1()==true)
ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
//-------------------------------------------------------------------+ if ( OrdersTotal()<1 && Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
if ( Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
if(V2()==true)
ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
//-------------------------------------------------------------------+ return;}
//+------------------------------------------------------------------+bool V1( ){
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY) {
return(false);
}
}
}
return(true);
}
bool V2( ){
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(OrderType()==OP_SELL) {
return(false);
}
}
}
return(true);
}
Скрипт был как пример, никто и не говорил, что надо его на оффлайн график кидать. Его обычно запускают на обычном графике и указывают ТФ оффлайн графика в строке
И #import "user32.dll" не нужен, он вызывается в WinUser32.mqh
И вообще, есть индикатор "6MTH_Renko_Chart_Builder_Indi_Ver_02.mq4", который умеет эмулировать тики на создаваемом графике Ренко. Он так и работает, индикатор запускают на обычном графике, потом открывают график Ренко, который обновляется в реальном времени.
Здравствуйте, подскажите как тут сделать?
Есть такой фрагмент кода, он работает. Это сигналы при подходе к торговым уровням. buy1_line - это уровень на графике, buy1 - расстояние цены в пунктах от соответствующего уровня. Дело в том что в коде есть возможность отключать не нужные уровни. В этом случае Значение уровня buy1_line (0.00000) а расстояние - отображается 6-ти значным числом, которое в принципе не имеет смысла. (уровень выключен, знать расстояние не нужно) Вопрос! Как обнулить расстояние до уровня - buy1, если соответствующий уровень выключен? (или в место этой цифры написать OFF ?)
Здравствуйте, подскажите пожалуйста, можно ли как-то получить тикет только что отосланного ордера? я отсылаю ордер
ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);
потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу.
спасибо!
Здравствуйте, подскажите пожалуйста, можно ли как-то получить тикет только что отосланного ордера? я отсылаю ордер
ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);
потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу.
спасибо!
А и не надо OrderSend(), чтобы узнать тикет уже открытого ордера, его надо выбрать с помощью OrderSelect().
В цикле шерстите все рыночные ордера, выбираете каждый и если совпадает тип, символ и магик, пишете тикет в массив.
Массив потом сортируете по возрастанию. Самое большое значение тикета - самый свежий ордер.
да, наверное так и придется. думал может есть какой-то прием или метод чтоб получить тикет только что посланного ордера. ну раз нету, придется по старинке, а жаль. спасибо!
Только что открытый будет как вы и написали - ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);
Но это при условии, что заявка была исполнена без ошибок, да и затирается такой тикет быстро.
Здравствуйте, подскажите пожалуйста, можно ли как-то получить тикет только что отосланного ордера? я отсылаю ордер
ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);
потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу.
спасибо!
проблема что тикетов этих больше одного. может 4, точно не знаю еще. поэтому создал класс, где будет номер тикета и другая информация, которую не хранит ордерселект. поэтому хотелось иметь доступ по тикету. но пока что в голову приходит только создавать обьекты класса и накидать в CarrayObj а потом доставать по индексу, сравнивать тикет и дальше анализировать. а проблема почему спрашивал - что терялся из-за обработки ошибок. но с тем разобрался, спасибо, сам виноват в другом месте. Господа evillive AlexeyVik - спасибо за оперативные ответы!
проблема что тикетов этих больше одного. может 4, точно не знаю еще. поэтому создал класс, где будет номер тикета и другая информация, которую не хранит ордерселект. поэтому хотелось иметь доступ по тикету. но пока что в голову приходит только создавать обьекты класса и накидать в CarrayObj а потом доставать по индексу, сравнивать тикет и дальше анализировать. а проблема почему спрашивал - что терялся из-за обработки ошибок. но с тем разобрался, спасибо, сам виноват в другом месте. Господа evillive AlexeyVik - спасибо за оперативные ответы!
)