Come codificare? - pagina 84

 

Comprare e vendere sui 100

Zamanib,

Ho capito quello che hai scritto, ma non vedo come fai a chiudere in profitto.

Questo mi sembra un EA di tipo Hedge.

Ce ne sono diversi in forex-tsd,

e non c'è bisogno di Martingala.

Grande essere

 
european:
Qualcuno può condividere idee/codice su come chiudere un ordine al valore TakeProfit.

Per qualche motivo il 'TakeProfit' nella funzione OrderSend() non funziona sempre negli ordini short/sell in MT4, anche se funziona bene negli ordini long/buy.

Ho scritto del codice che confronta il valore di TakeProfit dell'ordine con il prezzo corrente, ma non funziona correttamente. Qualche idea?

euro

I long vengono chiusi al prezzo "bid", mentre gli short vengono chiusi al prezzo "ask".

 
Big Be:
Zamanib,

Capisco quello che hai scritto, ma non vedo come fai a chiudere in profitto.

Questo mi sembra un EA di tipo Hedge.

Ce ne sono diversi in forex-tsd,

e non c'è bisogno di Martingala.

Grande essere

Vedo il mercato muoversi in onde su e giù qualche settimana si ottiene 2 cicli su/giù ho uno stratey diverso quando è tendenza.

per favore indirizzami verso l'hedge ea. Vedo molto di esso. ma non quello che excatly quello che voglio.

 

problema di codice o di piattaforma?

ralph.ronnquist:
i long sono chiusi al prezzo "bid", mentre gli short sono chiusi al prezzo "ask".

Grazie per aver risposto.

Per qualche ragione il mio codice non funziona:

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

se (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

Sarei grato per un consiglio.

euro

 
european:
Grazie per aver risposto.

Per qualche ragione il mio codice non funziona:

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

[/PHP]

I would be grateful for advice.

euro

Giusto; "Close[0]" è il prezzo "bid", che non è il prezzo di chiusura di un OP_SELL. Un OP_SELL viene chiuso contro il prezzo "ask", che è qualche pips (aka spread) sopra il prezzo "bid".

Quando il tuo EA viene eseguito, il prezzo "bid" è anche disponibile come variabile chiamata "Bid" e il prezzo "ask" come variabile chiamata "Ask". Quindi lo snippet di codice sarebbe meglio come segue

[PHP]if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) ChiudiOrdine(orderNo);

se (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

 

Si prega di aiutare nel codice, grazie...

Ciao,

Sono nuovo nella scrittura di EA, stavo provando quanto segue ma ho ottenuto un errore di "ticket non valido per la funzione OrderModify", Qualcuno può gentilmente dare un'occhiata e aiutare? Ringraziando in anticipo.

void ModifyHedgeSL(int SL) {

if (SL<1) return;

bool bres;

doppio sl, openadj;

if (lastopenbuy==1 && lastopensell==0) {openadj=Ask-Bid;} else {openadj=0;}

for (int i = 0; i < OrdersTotal(); i++) {

OrderSelect (i, SELECT_BY_POS,MODE_TRADES);

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_BUY )

{

sl = GetLastLongOpenPrice()-openadj-SL*Point;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, White);

if (bres) Print("Modifica di Hedge BUY completata");

if (!bres) Print("Errore nella modifica dell'ordine Hedge BUY: ",ErrorDescription(GetLastError());

}

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_SELL )

{

sl = GetLastShortOpenPrice()-openadj+SL*Point;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, Gold);

if (bres) Print("Modifica dell'Hedge SELL completata");

if (!bres) Print("Errore nella modifica dell'ordine Hedge SELL: ",ErrorDescription(GetLastError());

}

}

return;

}

double GetLastLongOpenPrice() {

int ord;

double LastLongOpenPrice=0;

//----

for (int i = 0; i <= OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber()==expertId && OrderType() == OP_BUY)

{

LastLongOpenPrice=OrderOpenPrice();

}

}

if (LastLongOpenPrice>0) {return(LastLongOpenPrice);}

else {return(-1);}

}

 

Come codificare gli ordini di acquisto/vendita quando lo SL viene colpito

Per esempio, se compro 1 lotto di EUR/JPY a 164,30 e Sl a 164,00.

se lo SL viene colpito, allora piazzerò un altro ordine di acquisto allo stesso prezzo, 164.30, con lo stesso SL a 164, e con più lotti, diciamo 1.5. Poi se lo SL viene colpito di nuovo, un altro ordine di acquisto sarà piazzato per comprare 2 lotti allo stesso prezzo con lo stesso SL.

C'è qualche codice per questo? Grazie!

 
boostrade:
Per esempio, se compro 1 lotto di EUR/JPY a 164.30 e Sl a 164.00.

se lo SL viene colpito, allora piazzerò un altro ordine di acquisto allo stesso prezzo, 164.30, con lo stesso SL a 164, e con più lotti, diciamo 1.5. Poi se lo SL viene colpito di nuovo, un altro ordine di acquisto sarà piazzato per comprare 2 lotti allo stesso prezzo con lo stesso SL.

C'è qualche codice per questo? Grazie!

Guarda questo thread su Frank EA https://www.mql5.com/en/forum

Penso che sia quello di cui hai bisogno o puoi usarlo come esempio.

 

ok

newdigital:
Guarda questo thread su Frank EA https://www.mql5.com/en/forum Penso che sia quello di cui hai bisogno o puoi usarlo come esempio.

Grazie mille newdigital, qualsiasi domanda la metterò qui. Grazie ancora.

 

Problema TP

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

Ralph,

come puoi vedere ho chiamato una funzione separata CloseOrder() dove ho usato 'Ask' e 'Bid' come tu raccomandi ma il problema esiste ancora.

// Funzione CloseOrder **********************************************************

bool CloseOrder(int orderT) {

doppio sA;

if (OrderSelect(orderT, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY) sA = Bid;

altrimenti sA = Ask;

bool bClosed = OrderClose(orderT,OrderLots(),sA,0,CLR_NONE);

se (bClosed == 1) {

pTrades = 0; return(1); }

altrimenti return(0); }}

**********************************************************

Speravo che garantisse che l'operazione venisse chiusa una volta raggiunto il TP, ma non è così, vedi grafico allegato, dove l'ordine corto è stato aperto a 104.03 con TP a 103.79. Anche se il prezzo l'ha colpito (TP) l'ordine non è stato chiuso.

File:
tp_failed.jpg  32 kb
Motivazione: