Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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
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?
euroI long vengono chiusi al prezzo "bid", mentre gli short vengono chiusi al prezzo "ask".
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 essereVedo 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?
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
Grazie per aver risposto.
Per qualche ragione il mio codice non funziona:
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.
euroGiusto; "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!
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
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 (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.