Come codificare? - pagina 123

 
InTrance:
Non provare, fallo

Sono al lavoro... e la porta di metatrader è bloccata qui

 

Ciao, sono ancora alle prime armi con la programmazione e sto avendo problemi ad aggiungere le seguenti funzioni a questo semplice EA:

1. Prendere profitto

2. Stop Loss

3. Stop di trascinamento

4. Numero di pip per attivare il trailing stop

//---- input parameters

extern double Lots=0.1;

extern int Slippage=5;

int MagicNum = 98760;

bool longPosOpened, shortPosOpened;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

double crossup = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,0, 1);

double crossdown = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,1,1);

if (crossup != EMPTY_VALUE)

{

if (!PosOpened(OP_BUY))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Symbol(),MagicNum,0);

}

}

else if(crossdown != EMPTY_VALUE)

{

if (!PosOpened(OP_SELL))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Symbol(),MagicNum,0);

}

}

return(0);

}

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

bool PosOpened(int orderType)

{

int total=OrdersTotal();

for(int cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderType() == orderType)

{

return(true);

}

}

return(false);

}

void CloseAllOpenAndPendingTrades()

{

int total = OrdersTotal();

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

if(Symbol() != OrderSymbol()) continue; // important! only close positions of current currency pair

int type = OrderType();

bool result = false;

switch(type)

{

//Close opened long positions

case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 200);

break;

//Close opened short positions

case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 200);

break;

//Close pending orders

case OP_BUYLIMIT :

case OP_BUYSTOP :

case OP_SELLLIMIT :

case OP_SELLSTOP : result = OrderDelete( OrderTicket() );

}

}

return(0);

}

 

Come rilevare un salto da sar parabolico?

Attualmente sto usando questo codice per rilevare un salto:

if(iSAR(NULL,0,0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // se c'è un salto in alto

Ma questo non sembra funzionare bene.

Come posso rilevare se lo psar è sopra o sotto le mie barre?

TIA

 
:: usa il tuo proxy in metatrader...

IN10ZIONE

ssvl:
sono al lavoro... e la porta di metatrader è bloccata qui
 
:: confronta il tuo risultato sar con una chiusura attuale[0]
ssvl:
Attualmente sto usando questo codice per rilevare un salto:

if(iSAR(NULL,0,0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // se c'è un salto in alto

Ma questo non sembra funzionare bene.

Come posso rilevare se lo psar è sopra o sotto le mie barre?

TIA
 

Hey IN10TION, conosci un buon modo per controllare se un trade si è appena chiuso in modo che l'EA non faccia un altro trade (re-entry) fino al prossimo segnale? Il mio EA controlla le condizioni di trading fino a 10 barre, ma se una condizione di Sell trade è già stata soddisfatta nelle prime barre e chiusa, voglio che l'EA smetta di controllare fino all'offset di 10 barre e aspetti il prossimo segnale effettivo?

Grazie

 

Utilizzare la funzione OrderHistory().

Lux

 
luxinterior:
Usa la funzione OrderHistory(). Lux

Grazie, ma non sono sicuro di come funzioni. Non voglio sapere se un ordine è stato appena chiuso, ma piuttosto se un ordine è stato appena aperto e chiuso entro così tante barre. Quindi posizionare un altro trade solo alla prossima entrata del segnale principale. Sto ancora cercando di eliminare i rientri rapidi quando un ordine è stato appena aperto e chiuso ma le condizioni di trading sono ancora soddisfatte. Voglio che in qualche modo faccia solo una compravendita per ogni segnale principale, quindi anche se le condizioni di compravendita sono ancora valide non si fa un'altra compravendita se è già stata fatta su quel segnale (incluso l'offset).

Vediamo se riesco a spiegare con un esempio. Potrebbe essere qualcosa che non può essere aiutato.

EG: Diciamo che sto usando QQE e VQI come punto di entrata del segnale (QQE incrocia e VQI cambia da comprare a vendere o viceversa)

Ora aggiungo un'opzione SignalOffset di diciamo 6 barre perché il segnale QQE cross e VQI potrebbe non avvenire esattamente sulla stessa barra.

Ora diciamo che c'è un trade valido entro 2 barre l'uno dall'altro quando QQE e VQI sono d'accordo, quindi ora viene piazzato un trade ma ho un TP di 10 pips e la barra si muove di 15 pips il mio TP viene colpito e il trade viene chiuso. Le condizioni di trading sono ancora soddisfatte a causa del mio offset di 6 barre, ora viene piazzato un altro trade (rientro) male se una o due barre si muovono di 100 pip e il mio TP è 10, ho appena avuto 10 trade, male Voglio solo un trade per segnale (offset incluso)

Questo ha senso? Vorrei comunque che si scambiasse entro le 6 barre anche se si verifica un segnale opposto e l'altro scambio è stato ancora chiuso.

Grazie

 
:: fare una variabile [switch], se c'è già 1 ordine di vendita fatto, smette di fare altre vendite (il valore dello switch è -1) e si riaggiusta solo quando c'è un segnale di acquisto e un ordine di acquisto fatto (il valore dello switch è 1)... qualcosa in più (surplus) a cui si può pensare è un reset del timer, nel caso in cui ci sia un grande trend in alto o in basso, si possono avere 2 o 3 vendite con un tipo di intervallo tra gli stessi ordini (timing).

IN10ZIONE

matrixebiz:
Grazie ma non sono sicuro di come funziona. Non voglio sapere se un ordine è stato appena chiuso, ma piuttosto se un ordine è stato appena aperto e chiuso entro così tante barre. Quindi posizionare un altro trade solo alla prossima entrata del segnale principale. Sto ancora cercando di eliminare i rientri rapidi quando un ordine è stato appena aperto e chiuso ma le condizioni di trading sono ancora soddisfatte. Voglio che in qualche modo faccia solo una negoziazione per ogni segnale principale, quindi anche se le condizioni di negoziazione sono ancora valide non negoziare di nuovo se è già stato negoziato su quel segnale (incluso l'offset).

Vediamo se riesco a spiegare con un esempio. Potrebbe essere qualcosa che non può essere aiutato.

EG: Diciamo che sto usando QQE e VQI come punto di entrata del segnale (QQE cross e VQI cambia da comprare a vendere o viceversa)

Ora aggiungo un'opzione SignalOffset di diciamo 6 barre perché il segnale QQE cross e VQI potrebbe non avvenire esattamente sulla stessa barra.

Ora diciamo che c'è un trade valido entro 2 barre l'uno dall'altro quando QQE e VQI sono d'accordo, quindi ora viene piazzato un trade ma ho un TP di 10 pips e la barra si muove di 15 pips il mio TP viene colpito e il trade viene chiuso. Le condizioni di trading sono ancora soddisfatte a causa del mio offset di 6 barre, ora viene piazzato un altro trade (rientro) male se una o due barre si muovono di 100 pip e il mio TP è 10, ho appena avuto 10 trade, male Voglio solo un trade per segnale (offset incluso)

Questo ha senso? Vorrei ancora che scambiasse entro le 6 barre anche se se e segnale opposto accade e l'altro commercio è stato chiuso ancora.

Grazie
 

Condividere dati tra 2 applicazioni metatrader

Sto cercando di scrivere i dati in un file da un metatrader per leggerli da un secondo metatrader.

Il problema è che quando sto cercando di scrivere su c:\ ricevo il messaggio di errore "il percorso assoluto del file "C:\EURUSD.txt" non è consentito".

Qualche idea o altro modo per condividere i dati tra due applicazioni metatrader?

Motivazione: