Caratteristiche utili da KimIV - pagina 74

 
allarkoms писал(а) >>

Ciao Igor!

Sto cercando di imparare MQL4 e a causa della mancanza di descrizione degli operatori del linguaggio un problema mi ha lasciato perplesso. Ho un indicatore con 8 buffer di dati accumulati. Ho bisogno che venga visualizzato su un timeframe che ho scelto e con il periodo del timeframe successivo. Per questo scopo, utilizza l'operatore iCustom(). Ma restituisce un valore doppio e non so come e se iCustom può e deve essere usato in questo caso.

Spero davvero nel vostro aiuto.

Ciao, Alexey!

Dovreste creare un nuovo indicatore che utilizzi la funzione iCustom(). Assegna i valori restituiti da questa funzione ai buffer del nuovo indicatore.

 
ProfitTrader писал(а) >>

Ciao Igor, e buon pomeriggio a tutti!

Mi interessa il codice che dovrebbe essere inserito in modo che l'Expert Advisor non faccia più operazioni in quel giorno quando chiude un trade...

L'ho trovato ma non funziona nello strategy tester, voglio testarlo, quale codice dovrei usare invece?

Allora dovrei aggiungerlo nella condizione di entrata.

Ciao, Sergiy!

Non vedo nemmeno perché l'uso della mia funzione data da voi non possa funzionare nello strategy tester. Se è ancora rilevante per te, ti suggerisco di postare l'intero codice dell'EA. Cerchiamo di capire...

 

Ci sono domande sulle differenze e le peculiarità delle funzioni SetOrder() e OpenPosition() nella gestione degli errori.


SetOrder():

      if ( err==8 || err==141) Sleep(1000*100);
      if ( err!=135 && err!=138) Sleep(1000*7.7);
      if ( err==139 || err==140 || err==148) break;

OpenPositions(): gli errori 8 (ERR_TOO_FREQUENT_REQUESTS), 138 (ERR_REQUOTE) e 139 (ERR_ORDER_LOCKED) non sono gestiti, diversamente da SetOrder():

      if ( err==141) Sleep(1000*100);
      if ( err!=135) Sleep(1000*7.7);
      if ( err==140 || err==148 || err==4110 || err==4111) break;

In SetOrder() l'errore 130 (ERR_INVALID_STOPS) è gestito dalla correzione degli stop, ma in OpenPositions() non è gestito in alcun modo.

In OpenPositions() è presente l'elaborazione 145 (ERR_TRADE_MODIFY_DENIED). Non è chiaro il senso dell'elaborazione qui.

Inoltre, nella prima pagina di questa discussione si parla della gestione degli errori che manca in entrambe le funzioni:

KimIV >>:

На паузу 7.7 секунды нарвутся ошибки 129 (Неправильная цена bid или ask), 130 (Неправильные стопы), 134 (Недостаточно денег), 136 (Нет цен).

Inoltre, non c'è elaborazione di altri errori (probabilmente importanti in questo caso), per esempio, 3 (ERR_INVALID_TRADE_PARAMETERS), 6 (ERR_NO_CONNECTION), 7 (ERR_NOT_ENOUGH_RIGHTS), 9 ERR_MALFUNCTIONAL_TRADE, 137 (ERR_BROKER_BUSY), 144(!), 4067 (ERR_TRADE_ERROR), 4106 (ERR_UNKNOWN_SYMBOL), 4107 (ERR_INVALID_PRICE_PARAM)


Igor, per favore commenta i punti descritti.

Le funzioni SetOrder() e OpenPositions() che ho menzionato sono prese dalla libreria b-Orders del 05.11.2008 e b-Positions del 29.10.2008 dal sito kimiv.ru.


Vorrei aggiungere. Se si verifica l'errore 5 ERR_OLD_VERSION, può essere gestito allo stesso modo di 2, 64, 65, 133; 4109 ERR_TRADE_NOT_ALLOWED allo stesso modo di 4110, 4111

 
Cosa significa l'errore 142? Non l'ho trovato nei codici di errore. Vorrei anche sapere se è possibile ridurre i ritardi da qualche parte per il pipsator?
 
khorosh >> :
Cosa significa l'errore 142? Non l'ho trovato nei codici di errore.

https://docs.mql4.com/ru/trading/errors

142 Un ordine è stato messo in coda. Questo non è un errore, ma uno dei codici di comunicazione tra il terminale client e il server di trading. Questo codice può essere ricevuto in un caso raro, quando durante la performance delle operazioni di trading c'è stata un'interruzione della connessione e la connessione è stata ripristinata in seguito. Deve essere gestito allo stesso modo dell'errore 128.

 
Здравствуйте Игорь! И всем Добрый день!

Mi interessa una domanda sui GEP, non sono descritti nel libro, e c'è molto di nuovo in questo argomento. Vorrei sapere come fare per aprire un trade ogni volta che appare un GEP. Voglio sapere come aprire gli ordini quando appare il GEP. Ce l'ho, ma per qualche motivo questo algoritmo non funziona, qual è l'errore qui?

extern int     Magic                = 777;
extern int       TP                 = 6;
extern int       SL                 = 2;
extern double  Lots                 = 0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}

   return(0);
  }
//+------------------------------------------------------------------+
 
Nella prima condizione la prima sottocondizione è superflua, la seconda condizione sulla vendita non è affatto fattibile. Un punto è uno scarto? Hai uno slippage di 2 e uno stop di 2, potrebbero esserci delle sovrapposizioni.
 
Roger >> :
Nella prima condizione la prima sottocondizione è ridondante, la seconda condizione in vendita è impossibile. Un punto è uno scarto? Il tuo slippage è 2 e lo stop è 2.

Grazie, ma perché la prima prefazione è superflua? Vuoi che una posizione di acquisto si apra quando una nuova barra è sopra la chiusura della precedente e viceversa. >> È questo il modo giusto?

if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Proprio così
if(  iClose(NULL,0,1)-iOpen(NULL,0,0)>10*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if( iOpen(NULL,0,0)- iClose(NULL,0,1)>10*Point )
   { //продаем
OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Roger >> :
>> Proprio così.

Per quanto ho capito la prima condizione implica automaticamente che il prezzo di chiusura sia maggiore di quello di apertura. Nel secondo, è il contrario??????