Sto imparando a scrivere un consigliere... - pagina 4

 

Se il vostro Expert Advisor è multivaluta, dovete.

Tanto più che i valori di Bid e Point sonoprobabilmente già impostati (dichiarati) attraverso MarketInfo().

Una volta ho iniziato un ramo su multicurrency Expert Advisor. Date un'occhiata e alcune domande saranno chiarite....

Domanda sul consulente esperto multivaluta'.

 

E qui specificamente sulla modifica

Domanda sul consulente multivaluta

 

Ho fatto questa variante... Subito dopo l'apertura, chiamo ModifyPos()

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);
    }  
  }

Stop - 20.

TakeProfit - 100

Messaggio nel log - OrderModify errore 130

 

Prova una posizione buy per le posizioni take

Ask+ TakeProfit*Point

Pensateci! Perché per una posizione di acquisto il take profit è improvvisamente sotto il prezzo corrente?

Non c'è da stupirsi che venga generato un errore

E lo stesso per la posizione di vendita...

Se non avete bisogno di cambiare Take Profit, allora è meglio farlo:

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
Allo stesso modo, per il sell-side
 
rid >> :

Pensateci! Perché il vostro take profit su una posizione di acquisto è improvvisamente al di sotto del prezzo corrente?

Non c'è da stupirsi che venga generato un errore!

Rid grazie mille!

Non stavo prestando attenzione...) ha funzionato e ha anche funzionato)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

L'ultimo errore che si trova ora nel log durante i test è OrderSend error 138.

Questo errore si verifica senza interruzione quando non ci sono compravendite, cioè per ogni tick si verifica questo errore.

Non appena viene attivato un ordine, l'errore scompare... l'ordine si chiude e l'errore si ripete...

Sembra che stia cercando di inviare un ordine senza alcun segnale... Ma non capisco perché, visto che c'è una condizione(if) per vendere e per comprare

 
ALex2008 писал(а) >>

L'ultimo errore che si trova ora nel log durante i test è OrderSend error 138.

Questo errore si verifica senza interruzione quando non ci sono compravendite, cioè per ogni tick si verifica questo errore.

Non appena viene attivato un ordine, l'errore scompare... l'ordine si chiude e l'errore si ripete...

Sembra che stia cercando di inviare un ordine senza alcun segnale... Ma non capisco perché, visto che abbiamo condizioni(se) per vendere e per comprare.

non leggere attentamente leggere https://book.mql4.com/ru/content è tutto lì

 

Leggere e capire sono cose diverse... Voglio capire in pratica)

C'è una condizione per entrare, dopo che queste condizioni sono soddisfatte il controllo viene passato alla funzione che apre l'ordine...

Non riesco a capire come OrderSend cerchi di lavorare aggirando le condizioni... e logicamente genera un errore... perché non ci sono condizioni di entrata

 
bool RefreshRates( )

Aggiorna i dati nelle variabili predefinite e negli array di serie temporali. Questa funzione viene utilizzata quando un Expert Advisor o uno script ha eseguito calcoli per molto tempo e ha bisogno di dati aggiornati. Restituisce TRUE se i dati sono aggiornati, altrimenti FALSE. I dati non possono essere aggiornati solo perché corrispondono allo stato attuale del terminale client. Gli Expert Advisors e gli script lavorano con la propria copia di dati storici. La copia dei dati sul simbolo corrente viene creata al primo lancio dell'Expert Advisor o dello script. Ad ogni successivo lancio dell'Expert Advisor (ricorda che lo script viene eseguito una volta sola e non dipende dai tick in arrivo), la copia creata inizialmente viene aggiornata. Durante il tempo di esecuzione dell'Expert Advisor o dello script, possono arrivare uno o più nuovi tick, quindi i dati possono diventare obsoleti.

//------------------------------------------------------------------------------

Prova a inserire questa funzione prima di eseguire OrderSend

Vedi anche: Ordini di apertura e impostazione 2008-05.

Ordini di apertura e impostazione2008-05-05 14:26:13

"Affinché il programma funzioni in modo stabile, con un numero minimo di ordini di compravendita rifiutati, prima di eseguire la funzione OrderSend(), i parametri dell'ambiente di informazione utilizzati dal programma dovrebbero essere aggiornati utilizzando le funzioni MarketInfo() e RefreshRates()".

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

non aiuta...

Motivazione: