[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 287

 
Quindi sarò in grado di vedere il codice corretto?
 
sergeev:
al primo ordine non di acquisto inonderete il conto con ordini di acquisto.


Grazie! Trovato un altro errore!

//+------------------------------------------------------------------+
//|                                                      OnlyBuy.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (OrdersTotal()==0)
   OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() != OP_BUY)
       OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
     }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
icas:


Grazie! Trovato un altro errore!


Mm-hmm.

ma il precedente non è stato risolto.

Non si può mettere un ordine che si apre immediatamente in un ciclo. Dovete prima fare un ciclo completo degli ordini e scoprire esattamente se c'è un Buy o no.

E solo dopo si mette un Buy, dopo quel ciclo.

 
sergeev:

Mm-hmm.

ma il precedente non è stato risolto.

Non si può mettere un ordine che si apre immediatamente in un ciclo. Dovete prima fare un ciclo completo degli ordini e scoprire esattamente se c'è un Buy o un No.

E solo dopo si dovrebbe piazzare un Buy se non c'è ancora.



Giusto, ho solo preso un pezzo del mio programma posti senza rifarlo. Lo farò ora - cinque minuti...
 
Ma anche questo codice non è corretto! Aprirà un ordine di acquisto solo se non ci sono altri ordini per qualsiasi altro strumento finanziario, e se ci sono altri ordini, non aprirà un ordine di acquisto.
 
icas:

Giusto, ho solo preso un pezzo del mio programma posti senza rifarlo. Lo farò ora - cinque minuti...
//+------------------------------------------------------------------+
//|                                                      OnlyBuy.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() == OP_BUY) return(0);
     }
   }
  OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  Sleep(10000); //Пауза 10 сек. для исполнениея ордера
//----
   return(0);
  }
//+------------------------------------------------------------------+
Proprio ora, giusto?
 
icas:
È proprio ora?
Sleep(10000); //Пауза 10 сек. для исполнениея ордера

Qual è il senso di questa pausa?
 
kolyango:

Perché questa pausa?

L'ordine non viene eseguito immediatamente. Senza una pausa al prossimo tick, l'ordine potrebbe non essere ancora aperto, e il programma invierà un altro comando per aprirlo. Nel tester MT5, è già possibile inserire il ritardo di esecuzione.
 
icas:
È corretto ora?

Avete provato a fare una funzione separata per cercare la presenza/assenza di elementi?

Per esempio:

bool ExistPositions(int mn, string sy="", int op=-1) {
   if (sy=="") sy=Symbol();
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (op<0 || OrderType()==op)  
            return(True);
         }
      }
   return(False);
}

Magic - numero magico di EA (impostato nelle impostazioni o generato automaticamente da EA). Poi per controllare l'assenza di posizione Buy da simbolo corrente dovrebbe essere scritto:

if (!ExistPositions(Magic, Symbol(), OP_BUY)) {
   // ... Тут код для вызова функции открытия позиций ... 
   }

Nota - non solo un comando per aprire un ordine Buy, ma una funzione completa con la gestione di tutti i parametri di apertura dell'ordine e gli errori restituiti dal server.

Tuttavia, per un tester, possiamo fare a meno di controllare i parametri inseriti per valori validi...

 
artmedia70:

Avete provato a fare una funzione separata per cercare la presenza/assenza di elementi?

Per esempio:

Poi per controllare l'assenza di posizione Buy dal simbolo corrente dovrebbe essere scritto:

Nota - non solo un comando per aprire un ordine Buy, ma una funzione completa con l'elaborazione di tutti i parametri di apertura dell'ordine e gli errori restituiti dal server.

Tuttavia, il tester può fare a meno di controllare i parametri inseriti per i valori ammissibili...



Nel primo post ho dato le funzioni, kolyango non era contento di questo. Inoltre, non mi piace lavorare con i maghi.