Come codificare? - pagina 283

 

Aiuto per le aspettative matematiche

Ciao

Sembra che io abbia fatto un po' di confusione con me stesso.

Sto cercando di utilizzare un modulo di aspettativa all'interno del mio EA, ho il modulo 1-avgwin/avgloss*sistema di precisione+1 e questo funziona bene, ma vorrei sapere come calcolare e visualizzare la differenza tra l'ordine e lo StopLoss, ad esempio

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Penso che questo debba essere un numero positivo.

Un'aspettativa di 1,45

Quindi per calcolare il TakeProfit -0.00197 * 1.45 = -0.00285

Posizionare il TP a OP_SELLSTOP 1.63406 - 1.63121

e viceversa per la posizione Long

fa tutto parte di questo thread https://www.mql5.com/en/forum/178980 e se date un'occhiata al foglio excel vedrete che sono quasi arrivato.

Qualsiasi aiuto sarebbe fantastico.

Grazie Beno

 
Beno:
Ciao

Mi sembra di aver fatto un po' di confusione.

Sto cercando di utilizzare un modulo di aspettativa all'interno del mio EA, ho il modulo 1-avgwin/avgloss*system accuracy+1 e questo funziona bene, ma vorrei sapere come calcolare e visualizzare la differenza tra l'ordine e lo StopLoss, ad esempio

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Penso che questo debba essere un numero positivo.

Un'aspettativa di 1,45

Quindi per calcolare il TakeProfit -0.00197 * 1.45 = -0.00285

Posizionare il TP a OP_SELLSTOP 1.63406 - 1.63121

e viceversa per la posizione Long

fa tutto parte di questo thread https://www.mql5.com/en/forum/178980 e se date un'occhiata al foglio excel vedrete che sono quasi arrivato.

Qualsiasi aiuto sarebbe fantastico.

Salute Beno

Il modo più semplice è non pensarci e usare:

double MathAbs(double value)

MathAbs - Documentazione MQL4

Saluti

 

Ciao CRN

Grazie per la risposta questo è quello che ho provato

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Penso che sia giusto ma stampa solo PipSL 15769.68328362

1 2011.01.04 00:00 vendere stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 vendere 1 0,01 1,54279 0,00000 0,00000 0,00 10000.00

3 2011.01.07 08:20 modificare 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 chiudere allo stop 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

e ho bisogno della differenza effettiva tra la vendita e lo SL

 

Qualcuno mi aiuti per favore.

Ciao e Buon Natale a tutti.

Prima di tutto sono un nuovo arrivato in questo forum, ho un problema con l'EA e qualcuno può risolverlo per me? Il problema è come impostare questo EA per il trading reale e l'EA è solo di colore grigio sul mio trade live.

Qui l'allegato:

spielershedge_library.mqh

spielershedge_pipstar.mq4

spielershedge_ea_v2.8.1.ex4

spielershedge_divergence_v5.1.ex4

-anche se era un vecchio ea ma penso che forse possiamo condividere e prendere qualcosa che andrà a beneficio di tutti noi.

-Ho appena trovato questo da Hedge trading spieler system derivato da futures spread trading - Pagina 193 @ Forex Factory ( SpielersHedge PipStar.mq4 ) e il resto da Hedge trading spieler system derivato da futures spread trading - Pagina 87 @ Forex Factory

-Scusate il mio cattivo inglese.

P/S : Sono molto apprezzato per la lezione, guide, commenti e critiche da tutti voi per il mio miglioramento. Credo che più diamo la nostra conoscenza, più guadagniamo la conoscenza.

 
Beno:
Ciao CRN

Grazie per la risposta questo è quello che ho provato

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Penso che sia giusto ma stampa solo PipSL 15769.68328362

1 2011.01.04 00:00 vendere stop 1 0,01 1,54279 0,00000 0,00000 0,00 10000,00

2 2011.01.07 08:20 vendere 1 0,01 1,54279 0,00000 0,00000 0,00 10000.00

3 2011.01.07 08:20 modificare 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 chiudere allo stop 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

e richiedo la differenza effettiva tra la vendita e lo SL

Se è necessario utilizzare iClose(0,0,0)-OrderStopLoss().

ma prima seleziona l'ordine giusto con OrderSelect;

Saluti

 

Filtro orario con CloseAll Aiuto per favore

Gidday

Ho un filtro a tempo che funziona sull'EA ma ho cercato di allegare un closeall ad esso in modo che se il tempo è uguale al tempo di chiusura, allora le posizioni aperte closeall

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}
 

per favore aiutatemi

extern int BuyStopTakeProfit=10;

extern int BuyStopSL=1000;

come codificare

se BuyStopTakeProfit Hit TakeProfit, cancella tutti gli ordini in sospeso

per favore qualcuno può aiutare

 

Aiuto!!!! Per favore!!!! funzione iCustom

Aiuto,

Ho provato di tutto per far sì che il mio C_EA_rev6.mq4 chiami il buffer qualsiasi dall'indicatore personalizzato VSATEXTSIGNALS.mq4. Ho usato la funzione iCustom ma restituisce sempre 2147483647 che mi sembra di capire sia un codice di errore. L'indicatore personalizzato posiziona segnali di testo sul grafico basati su tecniche di analisi di diffusione del volume. L'indicatore personalizzato funziona bene quando lo collego a un grafico. Ho speso innumerevoli ore su questo e provato ogni combinazione che conosco. Qualsiasi aiuto sarebbe molto apprezzato. Inoltre, ho una domanda, è possibile utilizzare la funzione iCustom su un indicatore personalizzato che chiama uno script o un file .dll?

Vedere gli allegati per il codice dell'indicatore e dell'EA.

Grazie,

cmfxtrader

File:
 
cmfxtrader:
Aiuto,

Ho provato di tutto per far sì che il mio C_EA_rev6.mq4 chiami il buffer qualsiasi dall'indicatore personalizzato VSATEXTSIGNALS.mq4. Ho usato la funzione iCustom ma restituisce sempre 2147483647 che mi pare di capire sia un codice di errore. L'indicatore personalizzato posiziona segnali di testo sul grafico basati su tecniche di analisi di diffusione del volume. L'indicatore personalizzato funziona bene quando lo collego a un grafico. Ho speso innumerevoli ore su questo e provato ogni combinazione che conosco. Qualsiasi aiuto sarebbe molto apprezzato. Inoltre, ho una domanda, è possibile utilizzare la funzione iCustom su un indicatore personalizzato che chiama uno script o un file .dll?

Vedere gli allegati per il codice dell'indicatore e dell'EA.

Grazie,

cmfxtrader

Ciao,

Il fatto è che mentre stai cercando di leggere il buffer dall'indicatore, esso emette messaggi di testo, che non sono buffer. Ecco perché stai ottenendo il valore 2147483647 che è EMPTY_VALUE e non un errore.

Comunque immagino che tu voglia automatizzare i segnali di questo indicatore. C'è una soluzione semplice per questo. L'indicatore è dichiarato per avere 7 buffer (#property indicator_buffers 7) ma ne sta usando solo 5. Gli indicatori possono usare al massimo 8 buffer. Ciò significa che puoi dichiarare un altro buffer aggiuntivo solo per i tuoi calcoli e riempirlo con i messaggi identificativi. Troverete i numeri dei messaggi nella funzione TextOutput. Aggiungete semplicemente i numeri al vostro buffer a seconda del messaggio che viene visualizzato. Per esempio se il testo è : "UPTHRUST / Weakness_" allora aggiungi 1 al tuo buffer, se il messaggio è PSEUDO UPTHRUST / Weakness_ allora aggiungi 4 e così via. L'indice del buffer sarà lo stesso del valore della variabile "i".

Per quanto riguarda la tua seconda domanda: puoi sempre utilizzare la funzione iCustom per un indicatore (non uno script) e leggere i valori se questo riempie i buffer dichiarati nell'indicatore. Per esempio, se si tratta di un indicatore che disegna delle linee, puoi leggere i valori delle linee - perché per disegnare qualcosa (tranne le etichette) l'indicatore deve riempire dei buffer. Se l'indicatore creerà oggetti grafici (come quello che hai allegato) allora dovrai: a) leggere i valori dagli oggetti grafici, o b) ricodificare l'indicatore (come ho suggerito sopra). Non importa se l'indicatore sta usando la DLL o no - ha solo bisogno di riempire correttamente il buffer per leggere i suoi valori dalla funzione iCustom.

 
Beno:
Gidday

Ho un Time Filter che lavora sull'EA ma ho cercato di allegare un closeall ad esso in modo che se il tempo è uguale al tempo di chiusura allora closeall posizioni aperte

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}

prova a controllare questa parte

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

l'altra parte del codice potrebbe essere più semplice, ma dovrebbe funzionare.

Tuttavia, se uscite dallo script prima di chiudere tutta la parte, allora non funzionerà, e sembra che lo script lo stia facendo.

Date un'occhiata a questa parte per esempio:

(fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday) return(0);

In inglese significa: se è venerdì, e il filtro friday è ON, e il TimeMark è stato passato (es. l'ora finale è 18.00 ed è 18.01) allora return(0).

Dovrebbe essere: se è venerdì, e il filtro venerdì è ON, e il TimeMark è stato passato CLOSE ALL e (es. l'ora finale è 18.00 ed è 18.01) allora return(0).