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
Domanda sull'iCCI
Sono nuovo di MQL4 e sto cercando di ottenere il precedente valore CCI. Ho provato ad usare la funzione iCCI con un valore Shift di 1, ma non mi dà il valore precedente. Come potrei farlo senza salvare il valore corrente in una variabile? Sto cercando di determinare la direzione del CCI.
Grazie per il vostro aiuto.
Il codice è basato sul tick, quindi se non c'è un tick in quel momento, allora il codice mancherà il controllo del tempo. Non credo che si possa arrivare al secondo esatto senza un qualche tipo di ciclo che sia costantemente in esecuzione.
Aiuto con la modifica dell'EA
Sto cercando di capire questo... potete aiutarmi per favore?
MB Trading - Azioni Opzioni Futures Forex Online Sconto Trading
Ho cambiato questo:
OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
ritorno(0);
A:
int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
Sleep(1500);
OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);
=================================== ======
Sto ottenendo questi errori:
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: ticket non valido per la funzione OrderModify
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend errore 131
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify errore 4051
=====================
Sto cercando di capire questo... puoi aiutarmi per favore?
MB Trading - Azioni Opzioni Futures Forex Online Sconto Trading
Ho cambiato questo:
OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
ritorno(0);
A:
int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);
Sleep(1500);
OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);
=================================== ======
Sto ottenendo questi errori:
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: ticket non valido per la funzione OrderModify
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend errore 131
2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify error 4051
=====================Il tuo problema è nella tua dimensione del lotto (volume) nel tuo ordine di invio. che restituisce un -1 a causa dell'errore. il biglietto verificabile non contiene un numero di biglietto contiene il flag di errore di -1 che ha innescato gli altri errori con la funzione ordermodify. Dovete correggere la variabile dimensione del lotto mylotsi, in modo che contenga un valore accettabile. in secondo luogo dovreste controllare il valore di ritorno nella variabile ticket per vedere che non contenga un flag di errore prima di chiamare la routine ordermodify.
keit
Posizione massima EA
qualcuno può aggiungere posizioni massime per questo EA
o lasciare che esegua una sola posizione?
grazie in anticipo
È meglio usare
MathAbs(NormalizeDouble(Bid,4)-NormalizeDouble(pivot,4))<Delta*Point,
Dove Delta=2...5
Qualcuno potrebbe dirmi il codice per lo stop loss e il tp. Ho bisogno di aggiungerli a questo EA.
questo SL e TP nascosti
int TakeProfit=20; // 20 pips take profit
int StopLoss =40; // 40 pips stoploss
int Slippage = 3;
int MagicNumber=1;
int i;
int start(){
//----- exit @ TP
if((ScanTrades()>=1)&& (ProfitInPips()>=TakeProfit)){
//----- This part will close all open orders and delete pending trades
for(i = OrdersTotal()-1; i >=0; i--)
{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);
if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
}
//------exit @ SL
if((ScanTrades()>=1)&& (ProfitInPips()<= -StopLoss)){
//----- This part will close all open orders and delete pending trades
for(i = OrdersTotal()-1; i >=0; i--)
{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);
if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());
if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());
if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());
}
}
}
return (0);
}
//----------- Call functions
int ScanTrades()
{
int Tot = OrdersTotal();
int Numb = 0;
for(int cnt=0; cnt<=Tot-1; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) Numb++;
}
return(Numb);
}
double ProfitInPips()
{
RefreshRates();
double Prof=0;
int i;
int totalOrders=OrdersTotal();
for(i=0;i<totalOrders;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber)
{
if(OrderType()==0)
{
Prof+=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
}
if(OrderType()==1)
{
Prof+=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);
}
}
}
return(Prof);
}
Diciamo che ho alcuni ordini di acquisto e di vendita
Quello che voglio fare è:
- Uscire da tutte le operazioni "Basket" a 5 pip in più del prezzo di pareggio delle operazioni aperte
Quello che sto cercando di fare nel primo ciclo for è trovare il valore dei trade aperti + swap e convertirlo in pip, e questa è la parte dove mi sto bloccando
Ho provato alcune idee ma ho raggiunto un vicolo cieco, so che il problema è nella prima istruzione for ma non riesco a risolverlo, qualsiasi aiuto è altamente appropriato
SymbolPL = 0;
OrdLots = 0;
Equity = 0;
MinPro = 5;
for(i = 0; i < OrdersTotal(); i++)
{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{if(OrderType() == OP_BUY) OrdLots += OrderLots();
if(OrderType() == OP_SELL) OrdLots -= OrderLots();
Equity += OrderProfit() + OrderSwap();
}
}
MinPro= MathRound (MathAbs(Equity /OrdLots)+MinPro);
//--- Count the open trades
int i;
int count=0;
for(i=0;i<OrdersTotal();i++)
{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber && OrderType()<2)
{ count++;
}
}
//--- find the profit in pips of the open trades
RefreshRates();
double profits=0,openPrice=0,points=0;
string sym="";
int i;
int totalOrders=OrdersTotal();
for(i=0;i<totalOrders;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber)
{
sym=OrderSymbol();
openPrice=OrderOpenPrice();
if(OrderType()==0)
{
profits+=(MarketInfo(sym,MODE_BID)-openPrice)/MarketInfo(sym,MODE_POINT);
}
if(OrderType()==1)
{
profits+=(OrderOpenPrice()-MarketInfo(sym,MODE_ASK))/MarketInfo(sym,MODE_POINT);
}
}
}
//--- Close when the open trades are 5 pips more than the breakeven price
if (count>1 && profits>MinPro )
{
for(i = OrdersTotal()-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Plum);
}
}
}
Penso che si possa usare una costante "equity_per_lotpoint", che verrebbe calcolata come:
[/PHP]
and then you'd have what you need after the first loop, with:
[PHP]if ( Equity > 5 * equity_per_lotpoint * MathAbs( OrdLots ) ) { ...
Grazie Ralph ma mi mancherebbe lo swap, e voglio includere il profitto/perdita dello swap nella chiusura della decisione degli ordini