Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 2

 
Vladimir Karputov:

Как Вы предложили компилятор ругается.Довел вот до такого варианта.

{
   Ticket=OrderSend(NULL,OP_BUY,Lot,Ask,slippage,0,0,NULL,magic,0,Blue);
   if(!Ticket>0)Print(GetLastError());
   else
   {
    if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
    if((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
    {
     TP=NormalizeDouble(Bid+TakeProfit*Point,Digits);
     bool modify=OrderModify(OrderTicket(),OrderOpenPrice(),TP,0,0);
      return;
    }
   }

Не работает. 

 
Nickolay72:

Как Вы предложили компилятор ругается.Довел вот до такого варианта.

{
   Ticket=OrderSend(NULL,OP_BUY,Lot,Ask,slippage,0,0,NULL,magic,0,Blue);
   if(!Ticket>0)Print(GetLastError());
   else
   {
    if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
    if((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
    {
     TP=NormalizeDouble(Bid+TakeProfit*Point,Digits);
     bool modify=OrderModify(OrderTicket(),OrderOpenPrice(),TP,0,0);
      return;
    }
   }

Не работает. 

Вот давайте разберём ваш код:

if(!Ticket>0)Print(GetLastError()) --- тикет - это целое число, примерно такое "2354865". Теперь вопрос: может-ли целое число не быть ( !2354865 ) Целое число может быть или больше "> 0" или меньше "< 0" . Это значение bool может быть false/true ( ! )

Далее, вот эта конструкция:  if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)==true) --- она перебирает параметры по тикету, и если вы смотрите конкретный тикет, то нет смысла проверять ни его магик, ни символ, то есть это явно лишнее: if((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))

И последнее: такие конструкции всё-же лучше брать в скобки, для явного указания очерёдности мат.задач: NormalizeDouble(Bid+(TakeProfit*Point),Digits);
 
Vitaly Muzichenko:


И последнее: такие конструкции всё-же лучше брать в скобки, для явного указания очерёдности мат.задач: NormalizeDouble(Bid+(TakeProfit*Point),Digits);

Нет, тут как раз можно без скобок. Вот когда сумму надо умножить, тогда обязательны скобки.

 
poman:

может взять значение времени открытия 0 бара ,с периодом D1 ,+добавить кол-во секунд,

в условие сравнить текущее время,  с полученным временем в первой строке 

в отложенный ордер можно кол- во сек поставить, время жизни ордера .

Data_1=iTime(Symbol(),PERIOD_D1,0)+86400;  //время жизни ордера


 

Спасибо за подсказку!) Помогло)
 

Помогите с кодом, советник перебирает все бары, как сделать, чтобы он перебирал последние 200 баров! Спасибо

int  i, k=iBars(Symbol(), 0);
for (i=1; i<k; i++)
 

Provider_Signal

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих

Provider_Signal, 2016.11.09 18:38

Как закрыть все ордера в советнике в  пятницу вечером ?? Что бы на выходные не оставлять.

Нашел функцию  DayOfWeek().

Можно написать проверку

if (DayOfWeek() == 5)
{
//
}

 но какую проверку написать на время. Например что бы было 22:00  ? 


 
Vladimir Karputov:

Provider_Signal

но какую проверку написать на время. Например что бы было 22:00  ?
extern int St_Hour   = 22;

if (Hour()==St_Hour)
 
Aibek Mugiynov:

Помогите с кодом, советник перебирает все бары, как сделать, чтобы он перебирал последние 200 баров! Спасибо

int  i, k=iBars(Symbol(), 0);
for (i=1; i<k; i++)
for (i=1; i<200; i++)
 

Здравствуйте, помогите.

Если на трёх барах ни один буфер не заполнен, заполняю буфер.


     int BarCount=3;
    BER=true;
   for(int il=1;il<=BarCount;il++)
     {
      if(BufferPointUp[il]!= EMPTY_VALUE){BER=false;break;}
     }
     if(BER) BufferPointUp[i]=high[i];

Заполняется на всех барах, без разбора.

Но все правильно, если делаю так

if(BufferPointUp[i+1]== EMPTY_VALUE&&BufferPointUp[i+2]== EMPTY_VALUE&&BufferPointUp[i+3]== EMPTY_VALUE)BufferPointUp[i]=high[i];

Как сделать эту проверку в цикле ?

 
mila.com:
extern int St_Hour   = 22;

if (Hour()==St_Hour)
Благодарю