открывать ордера с разрывом в 10 пипсов - страница 4

 
    //datetime lastTime  = 0;
    double highest_open_price=0;
    //int      lastTicket = -1; // None open.
    int      highest_Ticket = -1; // None open.
    for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
        OrderSelect(0, SELECT_BY_POS,MODE_TRADES)                 // Only my orders w/
    &&  OrderMagicNumber()  == 0           // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    //&&  OrderOpenTime()     >=  lastTime
    &&  ?????????()     >=  highest_open_price
    ){
      highest_open_price= ????????();
      highest_Ticket = OrderTicket();
    }

Как я уже сказал - простая замена

 
GumRai:

Как я уже сказал - простая замена



спасибо GumRai: но мой дальнейший вопрос заключается в том, что я считаю, что ?????????() - это OrderOpenTime().

теперь как мне заставить его работать с моей торговой логикой, как вы указали ранее.




      
rsi1=iRSI(NULL,0,14,PRICE_CLOSE,1);
rsi2=iRSI(NULL,0,14,PRICE_CLOSE,0); 
     
 if(rsi2>70 && Ask > High[1] + (10*pips2dbl) )
  {
      Opn_S=true;
     } 
     else 
   if(rsi2>70 && Ask < High[1] + (10*pips2dbl)) 
      {
      Opn_S=false;
     }

 Here you give value to Opn_S, but you do nothing with it







   lastTicket=OrderSend(Symbol(),OP_BUY,mylot(),Ask,0,0,0,"My Comment",magic,0,Green);

Здесь нет условий для открытия ордера и вы перезаписываете значение lastTicket.

В вашем коде нет логики, это просто 3 секции кода, которые совершенно не связаны друг с другом

===========================================================================================================================




HHH

Почему я спрашиваю, я организовал результат вот так BELOW code...... это привело к тому, что я хотел, но проблема в том, что он открывает несколько ордеров в одной строке. см. RESULT PICS выше

// Orders accounting 
   datetime lastTime  = 0;
    double highest_open_price=0;
    lastTicket = -1; // None open.
    int      highest_Ticket = -1; // None open.
    for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
        OrderSelect(0, SELECT_BY_POS,MODE_TRADES)                 // Only my orders w/
    &&  OrderMagicNumber()  == 0           // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    &&  OrderOpenTime()     >=  lastTime
    &&  OrderOpenTime()     >=  highest_open_price
    ){
      highest_open_price= OrderOpenTime();
      highest_Ticket = OrderTicket();
    }





        
 if(Bid > High[1] && OrderOpenTime()     > highest_open_price)
  {
      Opn_S=true;
     }   
CurrentTime= Time[1];





if(Opn_S==true)               // No opened orders +
        {                                       // criterion for opening Sell
         RefreshRates();                   // Refresh rates     
         lastTicket=OrderSend(Symbol(),OP_SELL,mylot(),Bid,0,0,0,"My Comment",magic,0,Red);
         if(lastTicket>0)
      
           {
            Comment("Opened order Sell ","#",lastTicket);
            return(0);                                 // Exit start()
           }
         if(Fun_Error(GetLastError())==1) // Processing errors
            continue;                             // Retrying
         return(0);                                   // Exit start()
        }
      break;                                    // Exit while
     }
//--------------------------------------------------------------- 9 --------------------------------------
   return(0);                                       // Exit start()
  }


 

Логика отсутствует, так как ваш код состоит из 3 разделов, которые не связаны друг с другом.

Я могу только сделать вывод, что вы скопировали и вставили части кода из других советников в тщетной надежде, что они будут работать вместе

" Я считаю, что ?????????() - это OrderOpenTime()".

Доказывает, что вы понятия не имеете, что делает этот цикл, и вы его не писали.

 

GumRai, пожалуйста, это весь мой код в основном открывает только продажи. как вы сказали, все эти отключения произошли в результате того, что я позволил ea открыть несколько ордеров и зациклить вещь, прежде чем просто просто отрезал мои ордера, как это.


{
   int cnt;
   int NumTrades;   // Number of buy and sell trades in this symbol
   
   NumTrades = 0;
   for (cnt = OrdersTotal()-1 ; cnt >=0 ; cnt--)
     {
     if(OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)==true)
      if ( OrderSymbol() != Symbol()) continue;
      if ( OrderMagicNumber() != magic)  continue;
      
      if(OrderType() == OP_BUY )  NumTrades++;
      if(OrderType() == OP_SELL ) NumTrades++;
             
     }
    
  }




then getting my ea to work with my loop by just adding  if(NumTrades==0 && Opn_B==true) // No new orders +

this ensures my ea to open just 1 order on a giving chart but now i want to expand my ea to open more than one order i remove  NumTrades==0 

to let the ea open order unrestricted with my ordersend as little i know now i know we can loop through order for so many reason and when it comes
to the looping for highest order on the chart i dont know that well,but can do it if example is giving. please bear with my little coding knowledge and put me through

below is my ea please assist me 
 
пожалуйста, жду вашего ответа
 

Я не уверен, является ли этот советник просто плохо написанным, недоработанным или это рабочий советник с удаленными частями кода.

Вы говорите, что он открывает в основном продажи, но я не вижу, что он может открыть покупку.

Основным условием для открытия покупки является

if(Opn_B==true)

Единственное другое место в коде, где Opn_B появляется в коде, это

Opn_B=false

Так что нигде нет возможности установить его в true.

Кстати,

   while(true) // Orders closing loop

Цикл, который только открывает ордера - отличный комментарий.

   double highest_open_price=0;
   int    highest_Ticket=-1;
   for(int pos=OrdersTotal()-1; pos>=0; pos--)
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) // Only my orders w/
         && OrderMagicNumber()==0           // my magic number
         && OrderSymbol()==Symbol() // and my pair.
         && OrderOpenPrice()>=highest_open_price)
        {
         highest_open_price=OrderOpenPrice();
         highest_Ticket=OrderTicket();
        }
 
GumRai:

Я не уверен, является ли этот советник просто плохо написанным, недоработанным или это рабочий советник с удаленными частями кода.

Вы говорите, что он открывает в основном продажи, но я не вижу, что он может открыть покупку.

Основным условием для открытия покупки является

Единственное другое место в коде, где Opn_B появляется в коде, это

Так что нигде нет возможности установить его в true.

Кстати,

Цикл, который только открывает ордера - отличный комментарий.

Спасибо, что проанализировали мой код и заметили рекомендации и исправления.

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

Кроме того, у меня есть причина, по которой я сделал ea открытой только на продажу, моя проблема с этим запросом сделала мою ea грубой, но когда я получил решение, я реорганизую все снова.

Посмотрите на ea, я удалил условия закрытия, а также условия покупки, что делает ea неполной.

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

самая высокая цена открытия в текущем символе графика и открытие на 10 пунктов выше нее, если это покупка/открытие на 10 пунктов ниже, если это продажа.

Я удаляю условия закрытия, потому что не хочу, чтобы бэктест закрывал сделки во время тестирования, чтобы убедиться, что код правильный, прежде чем вводить другие условия.

Как только решение будет достигнуто, я снова организую свою ea с соответствующим условием закрытия, вот почему я прошу вас помочь мне с этой проблемой, хотя вы помогаете.




 

Итак, я дал вам код для поиска ордера с самой высокой ценой открытия.

Теперь остается проверить, находится ли цена как минимум на 10 пунктов выше этого значения, и, если да, открыть другой ордер.

 

пожалуйста, GumRai: как я могу разместить цикл в ea, потому что способ, которым я это сделал, не сработал в backtest......

Как я это сделал? Я использовал highest_open_price и highest_Ticket для записи некоторых условий в ea, но это не дало мне желаемого результата на бэктесте.

Может я что-то упускаю?


  double highest_open_price=0;
   int    highest_Ticket=-1;
   for(int pos=OrdersTotal()-1; pos>=0; pos--)
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES) // Only my orders w/
         && OrderMagicNumber()==0           // my magic number
         && OrderSymbol()==Symbol() // and my pair.
         && OrderOpenPrice()>=highest_open_price)
        {
         highest_open_price=OrderOpenPrice();
         highest_Ticket=OrderTicket();
        }
 
Да, вы не показываете код. Как мы можем узнать, что вы сделали/не сделали?
Причина обращения: