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

 

Che tipo di errore è questo, lo prendo dalla parte del DC, un cattivo allenamento?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

Che tipo di errore è questo, lo deduco dalla parte del DC del cattivo debriefing?

128

ERR_TRADE_TIMEOUT

Timeout scaduto


Pezzo del gestore:

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

ERR_TRADE_TIMEOUT

Timeout scaduto per l'esecuzione del trade


Pezzo del gestore:

Ho questi gestori di errori nel mio codice, ma non sono mai esistiti. Oggi ho deciso di controllare il mio programma nella demo di una popolare società di brokeraggio e mi sono trovato di fronte a questi bug per la prima volta.

Ho capito bene che questo è un problema di hardware della società di intermediazione e non dalla mia parte?

 

L'idea è di calcolare se il prezzo ha rotto il prezzo medio durante un certo numero di candele precedenti.

la funzione non viene eseguita affatto, il risultato dovrebbe essere: se non si è rotto returnToMA ==1, se si è rotto returnToMA ==0

forse c'è un'altra soluzione a questo problema?


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

se(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

se (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)) {return(0);break;}

altrimenti return(1);

}

 
forexpipsrunner:

L'idea è di calcolare se il prezzo ha rotto il prezzo medio durante un certo numero di candele precedenti.

la funzione non viene eseguita affatto, il risultato dovrebbe essere: se non si è rotto returnToMA ==1, se si è rotto returnToMA ==0

Forse ci sono altre soluzioni a questo problema?

La vostra funzione avrà sempre zero perché il massimo o il minimo è sempre maggiore/meno che o uguale al MA.

La candela deve essere descritta da almeno due parametri nel vostro caso:

1) Definire dove la candela ha aperto - sopra o sotto la MA

2. In base a 1, controllare se il MA è stato toccato.

 
-Aleks-:

Avrete sempre zero nella funzione - poiché il massimo o il minimo è sempre maggiore/meno di o uguale al MA.

La candela deve essere descritta da almeno due parametri nel vostro caso:

1. determinare dove la candela ha aperto - sopra o sotto la MA

2. In base a 1, controllare se il MA è stato toccato.

Grazie. Ho aggiunto la condizione ma restituisce sempre 1. Posso cambiare le parentesi da qualche parte? Oppure break non funziona e la funzione termina assegnando 1 al valore di ritorno


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

se ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

else return(1);

}

 
forexpipsrunner:

Grazie. Ho aggiunto la condizione, ma restituisce sempre 1. Posso cambiare le parentesi da qualche parte? Oppure break non funziona e la funzione termina assegnando 1 al valore di ritorno


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

se ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}

else return(1);

}


Prova così

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

Restituirà 1 se la condizione è soddisfatta - c'era un'intersezione - non è quello che vogliamo?

 
-Aleks-:

Prova questo

Restituirà 1 se la condizione è soddisfatta - c'era un'intersezione - non è quello che vogliamo?

Grazie, funziona alla perfezione con la tua versione del codice
 
forexpipsrunner:
Grazie, funziona alla perfezione con la tua versione del codice

Felice di essere d'aiuto.
 

Buon pomeriggio!

Ragazzi, potete dirmi se è possibile visualizzare programmaticamente l'indicatore sul grafico? O solo manualmente?

Se sì, quale comando viene dato?