Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 914

 
evillive:

Скрипт был как пример, никто и не говорил, что надо его на оффлайн график кидать. Его обычно запускают на обычном графике и указывают ТФ оффлайн графика в строке

И #import "user32.dll" не нужен, он вызывается в WinUser32.mqh

И вообще, есть  индикатор "6MTH_Renko_Chart_Builder_Indi_Ver_02.mq4", который умеет эмулировать тики на создаваемом графике Ренко. Он так и работает, индикатор запускают на обычном графике, потом открывают график Ренко, который обновляется в реальном времени.


Благодарю Вас!)
 

Здравствуйте, подскажите как тут сделать?

Есть такой фрагмент кода, он работает. Это сигналы при подходе к торговым уровням. buy1_line - это уровень на графике, buy1 - расстояние цены в пунктах от соответствующего уровня. Дело в том что в коде есть возможность отключать не нужные уровни. В этом случае Значение уровня buy1_line (0.00000) а расстояние - отображается 6-ти значным числом, которое в принципе не имеет смысла. (уровень выключен, знать расстояние не нужно) Вопрос! Как обнулить расстояние до уровня - buy1, если соответствующий уровень выключен? (или в место этой цифры написать OFF ?)

string buy1_line=DoubleToStr(Price_Line,Digits);
string buy2_line=DoubleToStr(Price_Line2,Digits);
string buy1=     DoubleToStr((Price_Line-Bid)/Point,0);
string buy2=     DoubleToStr((Price_Line2-Bid)/Point,0);       

message=
 "buy_1 ("+buy1_line+"):"+(buy1>"0"?"+":"")+buy1+"   \n"+
 "buy_2 ("+buy2_line+"):"+(buy2>"0"?"+":"")+buy2+"   \n";

SendNotification(message);
 

Здравствуйте, подскажите пожалуйста, можно ли как-то получить тикет только что отосланного ордера? я отсылаю ордер 

ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);

потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу. 

спасибо! 

 
danik:

Здравствуйте, подскажите пожалуйста, можно ли как-то получить тикет только что отосланного ордера? я отсылаю ордер 

ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);

потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу. 

спасибо! 

А и не надо OrderSend(), чтобы узнать тикет уже открытого ордера, его надо выбрать с помощью OrderSelect().

В цикле шерстите все рыночные ордера, выбираете каждый и если совпадает тип, символ и магик, пишете тикет в массив.

Массив потом сортируете по возрастанию. Самое большое значение тикета - самый свежий ордер.

 
да, наверное так и придется. думал может есть какой-то прием или метод чтоб получить тикет только что посланного ордера. ну раз нету, придется по старинке, а жаль. спасибо!
 
danik:
да, наверное так и придется. думал может есть какой-то прием или метод чтоб получить тикет только что посланного ордера. ну раз нету, придется по старинке, а жаль. спасибо!

Только что открытый будет как вы и написали - ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);

Но это при условии, что заявка была исполнена без ошибок, да и затирается такой тикет быстро. 

 
danik:

Здравствуйте, подскажите пожалуйста, можно ли как-то получить тикет только что отосланного ордера? я отсылаю ордер 

ticket = OrderSend(Symbol(), cmd, Lot((OOP-OSL)/Point),OOP,1,OSL, OTP,NULL, Expert_ID, 0);

потом проверяю чтоб если ticket < 1, а теперь хотелось бы получить номер OrderTicket(), при этом не проходя вновь все открытые ордера, так как их может оказаться много, и ожидаю проблему если два почти одинаковых ордера с разными стопами высылать сразу. 

спасибо! 

А чем тебе не нравится объявить ticket на уровне глобальных переменных?
 

проблема что тикетов этих больше одного. может 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); 
}

)