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

 
trader781:

Cosa fare se lo stop/stop è 200

ma

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits);

su un dollaro-yen renderà 317.000 al tasso di cambio di 117.000

risultato atteso 117.200

Se Point()==0,001 (su USDJPY), allora 200*0,001 è uguale a 0,2

Ora se aggiungiamo 0,2 a 117,0 otteniamo 117,2

Dov'è l'"ingiustizia"?

 
Artyom Trishkin:

Se Point()==0,001 (su USDJPY), allora 200*0,001 è uguale a 0,2

Ora se aggiungiamo 0,2 a 117,0 otteniamo 117,2

E dov'è l'"ingiustizia"?

ci si aspetta che 117+(200*_Point) produca 117.200

è normalmente testato su EURUSD

Vitaly l'ha descritto sopra, grazie.

Credo di averla trovata.

Penso che sia abbastanza buono come algoritmo intermedio e ora è necessario filtrare questi momenti in qualche modo

https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

117+(200*_Point) dovrebbe dare un output di 117.200

...

Beh, è quello che sta dando... Vi ho mostrato il calcolo. O avete multivaluta e prendete i dati da un simbolo "non nativo"?

Allora usate SymbolInfoDouble() e (int)SymbolInfoInteger() invece di Point() e Digits()

 
Artyom Trishkin:

Beh, è quello che sta dando... Ti ho mostrato il calcolo. Oppure avete una multi-valuta e prendete i dati da un simbolo "non nativo"?

Allora invece di Point() e Digits() usate SymbolInfoDouble() e (int)SymbolInfoInteger()

Grazie, funziona)))

Attualmente sto cercando un modo per inserire un trailing stop in una catena di ordini

Ho 10 ordini in passi di 200 da 115.000 a 117.000

Ogni lotto è più grande di x rispetto al precedente

l'obiettivo è di mettere un trailing stop su tutta la catena di ordini usando il seguente calcolo (prezzo medio)+(y*_Point)

Ho un trailing stop. La mia domanda è come attaccarlo al prezzo medio per tutto lo stack e come viene calcolato a seconda dei lotti

 
trader781:

Grazie, funziona)))

Al momento si sta cercando un modo per inserire il trailing in una catena di ordini

Ho 10 ordini in passi di 200 da 115.000 a 117.000

Ogni lotto è più grande di x rispetto al precedente

l'obiettivo è di mettere un trailing stop su tutta la catena di ordini usando il seguente calcolo (prezzo medio)+(y*_Point)

Ho un trailing stopper stesso; la domanda è come attaccarlo al prezzo medio per tutto lo stack e come viene calcolato a seconda dei lotti

Un consiglio universale: imparate a programmare da zero. Allora non avrete queste domande, programmare non è un compito facile.

E per arrivare all'essenza della domanda: Quindi, bisogna passare attraverso TUTTI gli ordini in un ciclo, selezionando solo quelli "necessari" e modificarli. Ma devi stare molto attento con questo, perché la probabilità di sostituire l'ordine selezionato per funzionare è molto alta.

 
Alexey Viktorov:

Un consiglio universale: imparate a programmare da zero. Allora non ci saranno queste domande, la programmazione non è facile.

E per arrivare all'essenza della domanda: Quindi, è necessario passare attraverso TUTTI gli ordini nel ciclo, selezionando solo "necessario" e modificarli. Ma bisogna stare molto attenti con questa domanda, perché la probabilità di sostituire l'ordine selezionato per lavorare è molto alta.

Non è alto, ma al 100%. Al momento sto lavorando sull'ultimo e il resto è in pausa, ma lo schema è impreciso e vorrei fare meglio
 

Buona giornata a tutti, ho scritto un EA basato su MAs. (Io stesso lo sto sviluppando in MQL4 da un po' e ho deciso di iniziare con qualcosa di semplice. Quindi volevo sapere cosa ho fatto di sbagliato. L'essenza dell'Expert Advisor è semplice: dare un allarme quando due o tre MA sono incrociate (a seconda del METODO: Aggressivo = incrocio di due MA, conservativo = incrocio di 3 MA) ... Questo è tutto. Entrerò nel mercato per conto mio. Nel mio Expert Advisor, ho prescritto due funzioni: Aggressivo - questo è un segnale al semplice incrocio di due MA più veloci e Conservativo - quando all'incrocio di due MA veloci si dovrebbe considerare anche il più lento (cioè il segnale nella direzione del trend). Il problema è che l'Expert Advisor dà solo UN avviso (quando inizia o cambia timeframe) e tace su tutti i segnali successivi! Ti sarei grato se mi dicessi cosa c'è che non va. Ho prescritto la funzione per tutti gli eventi secondo le regole di MQL4. Naturalmente potrei registrare tutto senza funzioni nell'evento On Tick, ma voglio registrare le funzioni separatamente, così lefunzioni potrebbero esserechiamate facilmente e voglio aggiungere nuove funzioni "filtri" con il tempo.

Codice

================================================================================================

extern bool Metod=false; // selezione del metodo: Conservative o Aggressive.

extern int Time_Frame=1;//Time frame

input bool Metod=false; //Conservative-TRUE | Aggressive-FALSE

extern inttern FastMA_Parametr=5;

extern int intMA_Parametr=8;

extern int SlowMA_Parametr=18;

extern inttern TrendMA=163;

extern bool DemarkGo=false;

extern inttern Demperiod=4;

int rez;// se MA incrocia verso il basso, rez=-1. se verso l'alto, rez=1.

//+------------------------------------------------------------------+

// Inizializza MA

double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// FastMA

double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Media MA

double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Slow МА


//+------------------------------------------------------------------+

int OnInit()

{

rez=0;

return(INIT_SUCCEED);

}

//=======================================

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

void OnDeinit(const int reason)

{



}

//=============================================

//+---------------------Funzione per il segnale Konservative se Metod=true---------------------------------------------+

int Konservative()

//Controlla un incrocio verso l'alto di 3 linee

{

se (Metod==true)


{

if(FastMA>MiddiMA&&&MiddiMA>SlowMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----. Conservatore");

rez=1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

ritorno(rez);


}


//Controlla l'incrocio verso il basso di 3 linee

se(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)

{

Alert(Symbol(),Time_Frame," ---- DOWN----. Conservatore");

rez=-1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

ritorno(rez);


}

}

ritorno(rez);

}

//=================================================

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Funzione aggressiva se

int Agressive()

// Controlla l'incrocio verso l'alto di 2 linee senza lentezza


{

se (Metod==false)

{

se(FastMA>MiddiMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----. aggressivo");

rez=1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);


}


//Controlla l'incrocio verso il basso di 2 linee senza una linea lenta

se(FastMA<MiddiMA&&rez>=0)

{

Alert(Symbol(),Time_Frame," ---- DOWN----. Aggressivo");

rez=-1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

}

}

ritorno(rez);

}

 
Олег:


Ecco, credo che tu possa farlo da solo.
File:
6645.mq4  7 kb
 
trader781:
Non è alto, ma al 100%. Al momento è l'ultimo ordine e gli altri sono in pausa, ma lo schema non è preciso e vorrei che fosse migliore.

No, non al 100%. O forse stai parlando di qualcos'altro.

In generale, l'algoritmo è il seguente:

Si imposta un ciclo per passare attraverso tutti gli ordini.

Si seleziona l'ordine successivo per lavorare con esso.

Controlla se quell'ordine è necessario... Se no, la prossima iterazione del ciclo...

Se è "necessario", controllate se è adatto alla modifica. Basta confrontare quanto è lontano dal suo livello di StopLoss

Se la distanza è sufficiente, l'ordine viene modificato.


Così, se avete una funzione di modifica con un ciclo su tutti gli ordini, e prima della sua chiamata, anche il ciclo sta lavorando, allora l'ordine selezionato sarà cambiato...

 
Alexey Viktorov:

No, non al 100%. O forse stai parlando di qualcos'altro.

In generale, l'algoritmo è il seguente:

Si imposta un ciclo per passare attraverso tutti gli ordini.

Si seleziona l'ordine successivo per lavorare con esso.

Controlla se quell'ordine è necessario... Se no, la prossima iterazione del ciclo...

Se è "necessario", allora si controlla se è adatto alla modifica. Basta confrontare quanto è lontano dal suo livello di StopLoss

Se è abbastanza lontano, l'ordine viene modificato.


Così, se avete una funzione di modifica con un ciclo su tutti gli ordini, e prima della sua chiamata, anche il ciclo sta lavorando, allora l'ordine selezionato sarà cambiato...

Il punto è che ci saranno SEMPRE ordini perdenti con un certo lotto, che dovranno essere riempiti anche a spese del resto. L'innesco è il tempo di chiusura. Se ne chiudiamo anche solo uno, l'intera catena sarà persa. Quindi la domanda è come tracciare il prezzo medio di tutti quelli scelti.