Come codificare? - pagina 163

 

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

=====================

 
coach3131:
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

 
jdun:
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:

double equity_per_lotpoint = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE );

[/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