aiutatemi per favore [risolto] - pagina 2

 
MOSTRA IL CODICE.
 

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }
Ho cancellato tutte le altre funzioni che non uso, tutto il mio codice è solo questo
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

La tua doppia dichiarazione di biglietto.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

La dichiarazione di ticket nasconde ... blah blah ? vedi che sono il compilatore umano.

Rimuovi il secondo int .

 
mrluck1:

Ho messo

bool order e

int ticket

su variabili globali, e il resto del codice su OnTick, ma ancora non fa alcuna voce ora

Non compilato, non testato

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Marco: Ho rimosso l'int duplicato, ma ora nessun trade è fatto, ho bisogno di 1 trade, se prezzo> nuvola ichimoku, quel codice prima era grande, ma ha continuato a creare nuovi trade se

il prezzo era sopra la nuvola, ho solo bisogno di aiuto per codificare in modo che lo script si fermi dopo il 1 trade.

Honest Knave: ho provato il tuo codice, ho solo definito magic_no che mancava, funziona bene, aspetta che il nuovo trade tocchi nuovamente la nuvola, sarà davvero utile per i prossimi progetti, ma

ho solo bisogno che si fermi dopo il 1º trade, cosa devo fare?

Grazie a tutti per il vostro aiuto

 
bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

Questo è il problema.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>-1)
        {
         order=1;
        }
      }
    }
  }


Quindi provate questo e l'ho fatto notare qualche post indietro.

Marco vd Heijden:

Notate anche che OrderSend restituisce o il numero del biglietto, o -1 meno uno se fallisce.

Vedi.
 
mrluck1:

Honest Knave: ho provato il tuo codice, ho appena definito magic_no che mancava, funziona bene, aspetta un nuovo trade se il prezzo tocca di nuovo la nuvola, sarà davvero utile per i prossimi progetti, ma

ho solo bisogno che si fermi dopo la 1 trade, cosa devo fare?

Grazie a tutti per il vostro aiuto

Non dovrebbe fare più di 1 trade...? Questo è ciò che fa:

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Onesto Fante:

Il tuo EA è fantastico, ma crea nuovi trade se il prezzo scende di nuovo alla nuvola ichimoku e poi torna su. Non ripete gli ordini nella stessa candela, come il problema che avevo, e imparerò molto da questo esempio che mi hai dato, per creare nuovi

EA, ma ho bisogno di un modo per codificare che dopo il primo scambio, l'EA o lo script si chiuderà immediatamente, quindi ho solo bisogno di 1 scambio mai fatto.

Marco: Ho provato il tuo nuovo aggiornamento, ma non fa nessun trade, ho messo proprio il modo in cui hai postato per ultimo, solo rimosso il secondo int, nel ticket. Ma il primo trade non viene mai fatto su strategy tester, cosa fare ora?

 
mrluck1:

Onesto Fante:

Il tuo EA è fantastico, ma crea nuovi trade se il prezzo scende di nuovo alla nuvola ichimoku e poi torna su. Non ripete gli ordini nella stessa candela, come il problema che avevo, e imparerò molto da questo esempio che mi hai dato, per creare nuovi

EA, ma ho bisogno di un modo per codificare che dopo il primo scambio, l'EA o lo script si chiuderà immediatamente, quindi ho bisogno solo di 1 scambio mai fatto.

Non capisco cosa intendi.

Quel codice non può aprire più di 1 ordine alla volta.

Ma se l'ordine si chiude e il trigger si ripete, ne aprirà un altro.

Vuoi dire che vuoi che venga aperta una sola operazione alla volta?

 
honest_knave:

Non capisco cosa vuoi dire.

Quel codice non può aprire più di 1 ordine alla volta.

Ma se l'ordine si chiude e il trigger si ripete, ne aprirà un altro.

Vuoi dire che vuoi che venga aperto un solo ordine alla volta?

Sì, signore, solo 1 trade per volta, ma il suo esempio è stato grande, sarà molto utile come base per creare nuovi eas