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

 
sibiriyak73:

Dov'è l'errore?

Se ci sono molti personaggi, allora ci sono molte "aperture".

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

Se ci sono molti personaggi, allora ci sono molte "aperture".

Grazie, amico. Come posso fare in modo che una transazione al giorno per staccare sullo strumento corrente e ignorare gli altri strumenti (EA sta su più strumenti)
 
sibiriyak73:
Grazie amico. Come si fa un'operazione al giorno strappare al simbolo corrente e ignorare gli altri strumenti (EA sta su diversi simboli)

- cercare nella storia dell'ordine per il suo numero magico e simbolo, se il tempo di apertura (o chiusura?) dell'ordine corrisponde alla data corrente, allora uscire da OnTick()

- controllare la "nuova barra" su TF D1


il primo modo - più scrittura, ma nel tester, MT4 funzionerà molto velocemente; il secondo modo - 3 linee di codice, ma nel tester "masticherà" il disco rigido e il tempo di test sarà più lungo

 
sibiriyak73:
(EA sta su diversi strumenti)

Ah, penso di aver capito, se hai un EA che sta su più strumenti, allora devi solo aggiungere un controllo che l'ordine appartiene all'EA.

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

Ah, penso di aver capito, se hai un EA su più strumenti, allora devi solo aggiungere un controllo che l'ordine appartiene all'EA.

Questo codice apre un numero enorme di offerte. L'idea è corretta, ma come implementarla correttamente.

 
sibiriyak73:

Questo codice apre un numero enorme di scambi. L'idea è corretta, ma come implementarla correttamente.

Hai bisogno di questo

Funzione isTradeToDay().

Questa funzione restituisce la bandiera commerciale per oggi

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

Cosa si può indovinare da un pezzo di codice qui?

Mettete un controllo, non più di una volta al giorno.

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

I ragazzi aiutano l'advisor ad aprire un trade al giorno sullo strumento.

Potresti provare questo

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

Potresti provare questo.

Tutto scritto molto tempo fa ... molto tempo fa.

Questo codice controlla cosa c'è già nel mercato e cosa c'è nella storia nel caso in cui sia già chiuso oggi.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

Cosa si può indovinare da un pezzo di codice qui?

Mettete un controllo, non più di una volta al giorno.

Saluti. Il problema è che se l'EA vede un trade aperto nel conto, non apre altri trade. È come "hai dei trade aperti sul tuo conto, perché vuoi che faccia questo". Devo spiegargli che non si deve aprire più di un trade su questo strumento(EUR USD per esempio) perché questo EA è aperto su pochi simboli. Penso che sarebbe sbagliato mostrare tutto il codice (è un grande codice con variabili dichiarate, ecc.).
Motivazione: