Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1833

 

Ragazzi, ho bisogno di ordini pendenti per aggiornare il loro valore ogni minuto, la modifica di qualcosa era storto, ha deciso di eliminare e impostare ogni minuto in entrambe le direzioni, nel tester funziona bene, ma nella vita reale, in qualche modo non consegna. Correggere o aiutare invece di cancellare, modificare per fare.


      if(TimeCurrent()>TimeCheck_sn && TimeCurrent()<TimeCheck_en && Ogranichitel > 0)
        {

         if(IsNewCandle())
           {

            if(OrderOfSymbol>0 && OrderType() ==  OP_BUYSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);

            if(OrderOfSymbol>0 && OrderType() ==  OP_SELLSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);


            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsSellAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
                  Print("OpenOrderSuccess");
                  
            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsBuyAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
                  Print("OpenOrderSuccess");


            if(OrderType() ==  OP_BUYSTOP && OrderOfSymbol>0)
               ticket2 = OrderModify(OrderTicket(), (Ask+(Skachok*Point)), 0, (Ask+((Skachok+TPsk)*Point)), 0);

            if(OrderType() ==  OP_SELLSTOP && OrderOfSymbol>0)
               ticket2 = OrderModify(OrderTicket()+1, (Bid-(Skachok*Point)), 0, (Bid-((Skachok+TPsk)*Point)), 0);
           }
        }


      if(TimeCurrent() == TimeCheck_en)
        {


         if(IsNewCandle())
           {
            if(OrderOfSymbol>0 && OrderType() ==  OP_BUYSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);

            if(OrderOfSymbol>0 && OrderType() ==  OP_SELLSTOP)
               ticket2 =  OrderDelete(OrderTicket(),Violet);
           }


        }
 
Порт-моне тв ordini pendenti per aggiornare il loro valore ogni minuto, la modifica di qualcosa era storto, ha deciso di eliminare e impostare ogni minuto in entrambe le direzioni, nel tester funziona bene, ma nella vita reale, in qualche modo non consegna. Correggere o aiutare invece di cancellare, modificare per fare.


Meglio tornare alla modifica, spiegare cosa è necessario
 
Tretyakov Rostyslav #:
Meglio tornare alla modifica, spiegare cosa è necessario

L'ordine dovrebbe essere modificato ogni volta su una nuova candela in entrambe le direzioni con un indentazione impostata in punti e su takeprofit (come un classico), se penetra (una rottura sulla notizia), allora l'ordine si apre (il secondo ordine può essere chiuso automaticamente), ma fino a quando non si apre, poi modificare ancora e ancora; e tutto questo entro un determinato periodo di tempo specificato nei parametri dell'advisor.

 
Порт-моне тв #:

L'ordine dovrebbe essere modificato ogni volta su una nuova candela in entrambe le direzioni con un indentazione specificata in punti e su takeprofit (come un classico), se penetra (una rottura sulla notizia), allora l'ordine si apre (il secondo ordine può essere chiuso automaticamente), ma fino a quando non si apre, poi modificare ancora e ancora; e tutto questo entro un determinato periodo di tempo specificato nei parametri dell'EA.

E come vengono fatti i primi ordini?
 
Tretyakov Rostyslav #:
Come vengono fatti i primi ordini?
if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsSellAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
                  Print("OpenOrderSuccess");
                  
            if(Close[1]>Open[1] && CountOrders()==0)
               if(NewsBuyAllow == true)
                  ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
                  Print("OpenOrderSuccess");
 
Порт-моне тв #:
Fammi dare un'occhiata.
 
Порт-моне тв #:
Hai la stessa condizione per entrambi i tipi di ordine
if(Close[1]>Open[1] && CountOrders()==0)
 
Tretyakov Rostyslav #:
Hai la stessa condizione per entrambi i tipi di ordine

È così che lo voglio, in entrambi i sensi, o devo aggiungere qualcosa?

 
Порт-моне тв #:

È così che lo voglio, in entrambi i sensi, o devo aggiungere qualcosa?

Qui... modifica una volta all'apertura del bar

Per quanto riguarda l'apertura, se fai trading sulle notizie, allora "Close[1]>Open[1]" non è affatto necessario.

su un lato "Close[1]>Open[1]", e sull'altro lato "Close[1]<Open[1]".

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Close[1]>Open[1] && CountOrders()==0)
     {
      if(NewsSellAllow == true)
        {
         ticket2 = OrderSend(Symbol(),OP_SELLSTOP, LotSk, Bid-(Skachok*Point), Slippage, 0, Bid-((Skachok+TPsk)*Point), "открыт ордер на продажу", Magic, 0, Red);
         Print("OpenOrderSuccess");
        }
     }
   if(Close[1]>Open[1] && CountOrders()==0)
     {
      if(NewsBuyAllow == true)
        {
         ticket2 = OrderSend(Symbol(),OP_BUYSTOP, LotSk, Ask+(Skachok*Point), Slippage, 0, Ask+((Skachok+TPsk)*Point), "открыт ордер на покупку", Magic, 0, Blue);
         Print("OpenOrderSuccess");
        }
     }
   if(newbar!=Time[0])
     {
      ModifyOrder();
      newbar=Time[0];
     }
  }
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders(int ot=-1) 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==Magic)
           {
            if(OrderType()==ot||ot==-1) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
//| Модификация ордера                                               |
//+------------------------------------------------------------------+
void ModifyOrder()
  {
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol&&OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUYSTOP&&OrderOpenPrice()!=Ask+(Skachok*Point))
              {
               if(OrderModify(OrderTicket(), Ask+(Skachok*Point), 0, Ask+((Skachok+TPsk)*Point)))
                 {Print("Ордер модифицирован");}
               else
                 {Print("Ошибка модификации ордера:", GetLastError());}
              }
            if(OrderType()==OP_SELLSTOP&&OrderOpenPrice()!=Bid-(Skachok*Point))
              {
               if(OrderModify(OrderTicket(), Bid-(Skachok*Point), 0, Bid-((Skachok+TPsk)*Point)))
                 {Print("Ордер модифицирован");}
               else
                 {Print("Ошибка модификации ордера:", GetLastError());}
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Tretyakov Rostyslav #:

Qui... modifica una volta all'apertura del bar

Per quanto riguarda l'apertura, se fate trading sulle notizie, allora "Close[1]>Open[1]" non è affatto necessario, e se la candela ha un valore, allora

su un lato "Close[1]>Open[1]", e sull'altro lato "Close[1]<Open[1]".

Grazie, lo proverò domani mattina.

Motivazione: