Come codificare? - pagina 310

 

...

Per lo spread in tempo reale uso questo:

double currentSpread = MarketInfo(Symbol().MODE_SPREAD);
Premeus:
Voglio mostrare il codice di spread in tempo reale all'interno di EA.
 

Grazie Malden. Ma so che il codice PHP per il server web, non so come codificare il lato EA. O è un supporto per gli altri.

Per favore, dimmi qualcosa di più specifico. Mi dispiace, ma sono nuovo nella programmazione MQL4.

E non sono sicuro di come e quale parte del programma viene eseguita quando arriva un nuovo prezzo.

L'intero programma o nella parte init() o all'interno di start().

Voglio ottenere informazioni tick e mostrare come ho chiesto questo thread.

 

Premeus

Questo è il codice di metatrader MQl 4 che ottiene lo spread per il simbolo corrente. Basta copiarlo nel vostro codice e avrete le informazioni sullo spread recuperate in questo modo

Quella linea di codice dovrebbe essere in start() per controllare lo spread su ogni singolo tick (dato che può cambiare su ogni tick). Una volta chiamata la funzione MarketInfo() e assegnato il valore alla variabile currentSpread, usa il currentSpread per qualsiasi test o ulteriore elaborazione di cui hai bisogno

Premeus:
Grazie Malden. Ma so che il codice PHP per il server web, non so come codificare il lato EA. O è un supporto per gli altri.

Per favore, dimmi qualcosa di più specifico. Mi dispiace, ma sono nuovo nella programmazione MQL4.

E non sono sicuro di come e quale parte del programma viene eseguita quando arriva un nuovo prezzo.

L'intero programma o nella parte init() o all'interno di start().

Voglio ottenere informazioni di spunta e mostrare come ho chiesto questo thread.
 

MartingailExpert_v1.0_Stocastico, come?

Ciao!

Qualcuno può dirmi perché non posso inserire lo Stoploss nel ticket di invio degli ordini?

Quando lo inserisco, l'EA non funziona!

Grazie!

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

//| aaa.mq4 |

//| Copyright Š 2007, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#property copyright "Copyright Š 2007, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

extern double step=25;

extern int StepMode=0;

// Ĺńëč StepMode = 0, ňî řŕă ěĺćäó îđäĺđŕěč ôčęńčđîâŕíííűé č đŕâí step

// Ĺńëč StepMode = 1, ňî řŕă ďîńňĺďĺííî óâĺëč÷čâŕĺňń˙

extern double proffactor=10;

extern double mult=1.5;

extern double lotbuy=0.01;

extern double lotssell=0.01;

extern double per_K=200;

extern double per_D=20;

extern double slow=20;

extern double zoneBUY=20;

extern double zoneSELL=80;

extern double Magicbuy=555;

extern double Magicsell=556;

double openpricebuy,openpricesell,lotsbuy2,lotssell2,lastlotbuy,lastlotsell,tpb,tps,cnt,smbuy,smsell,lotstep,

ticketbuy,ticketsell,maxLot,free,balance,lotsell,lotbuy,dig,sig_buy,sig_sell,ask,bid;

int OrdersTotalMagicbuy(int Magicbuy)

{

int j=0;

int r;

for (r=0;r<OrdersTotal();r++)

{

if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))

{

if (OrderMagicNumber()==Magicbuy) j++;

}

}

return(j);

}

int OrdersTotalMagicsell(int Magicsell)

{

int d=0;

int n;

for (n=0;n<OrdersTotal();n++)

{

if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES))

{

if (OrderMagicNumber()==Magicsell) d++;

}

}

return(d);

}

int orderclosebuy(int ticketbuy)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == simbolo && OrderMagicNumber()==Magicbuy)

{

ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotsbuy2=OrderLots() ;

double bid = MarketInfo(symbol,MODE_BID);

RefreshRates();

OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta);

}

}

lotsbuy2=lotsbuy;return(0);

}

int orderclosesell(int ticketsell)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicsell)

{

ticketsell=OrderTicket();OrderSelect(ticketsell, SELECT_BY_TICKET, MODE_TRADES);lotssell2=OrderLots() ;

double ask = MarketInfo(symbol,MODE_ASK);

RefreshRates();

OrderClose(ticketsell,lotssell2,ask,3, Lime);

}

}

lotssell2=lotssell;return(0);

}

int start()

{

//----

doppio profitbuy=0;doppio profitsell=0;

string symbol = OrderSymbol();

double spread = MarketInfo(symbol,MODE_SPREAD);

double minLot = MarketInfo(symbol,MODE_MINLOT);

se (minLot==0,01){dig=2;maxLot=MarketInfo(symbol,MODE_MAXLOT);}

if (minLot==0.1){dig=1;maxLot=((AccountBalance()/2)/1000);}

if(OrdersTotalMagicbuy(Magicbuy)>0)

{

doppio smbuy;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket(); OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);

smbuy = smbuy+OrderLots(); openpricebuy = OrderOpenPrice(); lastlotbuy = OrderLots();

}

}

{

if (smbuy+(NormalizeDouble((lastlotbuy*mult),dig))<maxLot)

{

if(StepMode==0)

{

if(Ask<=openpricebuy-step*Point)

{

lotsbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

}

se(StepMode==1)

{

if(Ask<=openpricebuy-(step+OrdersTotalMagicbuy(Magicbuy)+OrdersTotalMagicbuy(Magicbuy)-2)*Point)

{

lotsbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

}

}

}

}

if(OrdiniTotaleMagicsell(Magicsell)>0)

{

doppio smsell;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicsell)

{

ticketsell = OrderTicket(); OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);

smsell = smsell + OrderLots(); openpricesell = OrderOpenPrice(); lastlotsell = OrderLots();

}

}

{

if (smsell+(NormalizeDouble((lastlotsell*mult),dig))<maxLot)

{

if(StepMode==0)

{

if(Bid>=openpricesell+step*Point)

{

lotssell2=lastlotsell*mult;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

}

se(StepMode==1)

{

if(Bid>=openpricesell+(step+OrdersTotalMagicsell(Magicsell)+OrdersTotalMagicsell(Magicsell)-2)*Point)

{

lotssell2=lastlotsell*mult;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

}

}

}

}

//xm7 modifica per cambiare il modo in cui viene generato il segnale. Il vecchio codice è alla fine

double Stoch_0 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,0);

double Stoch_1 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1);

se(OrdiniTotaleMagicbuy(Magicbuy)<1)

{

if(Stoch_0 > zonaBUY && Stoch_1 <= zonaBUY)

ticketbuy = OrderSend(Symbol(),OP_BUY,lotsbuy,Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

se(OrdiniTotaleMagicelli(Magicelli)<1)

{

se(Stoch_0 = zonaSELL)

ticketsell = OrderSend(Symbol(),OP_SELL,lotssell,Bid,3,0,0, "MartingailExpert",Magicsell,0,Rosso);

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket(); OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES); profitbuy = profitbuy+OrderProfit() ;

openpricebuy = OrderOpenPrice();

}

}

tpb = (OrdersTotalMagicbuy(Magicbuy)*profattore*Point)+openpricebuy;

double bid = MarketInfo(Symbol(),MODE_BID);

se (profitbuy>0)

{

se (Bid>=tpb) orderclosebuy(ticketbuy);

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);profitsell = profitsell+OrderProfit();

openpricesell = OrderOpenPrice();

}

}

tps = openpricesell-(OrdersTotalMagicsell(Magicsell)*proffactor*Point);

double ask = MarketInfo(Symbol(),MODE_ASK);

se (profitsell>0)

{

se (Ask<=tps)orderclosesell(ticketsell);

}

free = AccountFreeMargin();balance = AccountBalance();

for (cnt=0;cnt< OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy) ticketbuy = OrderTicket();

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicsell) ticketsell = OrderTicket();

}

if (OrdersTotalMagicbuy(Magicbuy)==0)

{

profitbuy=0;ticketbuy=0;tpb=0;

}

se (OrdersTotalMagicsell(Magicsell)==0)

{

profitsell=0;ticketsell=0;tps=0;

}

Comment("FreeMargin = ",NormalizeDouble(free,0)," Balance = ",NormalizeDouble(balance,0)," maxLot = ",NormalizeDouble(maxLot,dig),"\n

"Totalbuy = ",OrdersTotalMagicbuy(Magicbuy)," Lot = ",smbuy," Totalsell = ",OrdersTotalMagicsell(Magicsell)," Lot = ",smsell,"\n

"---------------------------------------------------------------","\n","Profitbuy = ",profitbuy,"\n",

"Profitsell = ",profitsell);

//----

for(int ii=0; ii<2; ii+=2)

{

ObjectDelete("rect "+ii);

ObjectCreate("rect "+ii,OBJ_HLINE, 0, 0,tps);

ObjectSet("rect "+ii, OBJPROP_COLOR, Red);

ObjectSet("rect "+ii, OBJPROP_WIDTH, 1);

ObjectSet("rect "+ii, OBJPROP_RAY, False);

}

for(int rr=0; rr<2; rr+=2)

{

ObjectDelete("rect1"+rr);

ObjectCreate("rect1"+rr,OBJ_HLINE, 0, 0,tpb);

ObjectSet("rect1"+rr, OBJPROP_COLOR, Blue);

ObjectSet("rect1"+rr, OBJPROP_WIDTH, 1);

ObjectSet("rect1"+rr, OBJPROP_RAY, False);

}

return(0);

}
 

...

Può essere un paio di ragioni, ma le più comuni sono :

- stop loss e/o take profit sono troppo vicini al prezzo corrente

- il tuo broker è un broker di tipo ECN/STP nel qual caso devi prima piazzare un ordine con stop loss e take profit impostati a 0 e solo quando un ordine è aperto puoi modificare lo stop loss e/o il take profit ai valori desiderati (onorando il punto precedente ovviamente)

pearl1:
Ciao!

Qualcuno può dirmi perché non posso inserire lo stop loss nel ticket di invio ordini?

Quando lo inserisco, l'EA non funziona!

Grazie!
 

Ciao a tutti, vorrei controllare come posso ottenere l'ultimo prezzo corrente sul grafico? So che è noob, ma non riesco a trovare la risposta. Per favore aiutatemi. Grazie.

Saluti

Terrance

 

...

Dipende da quale:

- il prezzo bid corrente è Bid

- il prezzo corrente è Ask

- qualsiasi altro prezzo: usa l'indice zero per il prezzo corrente, quindi Close[0] è la chiusura corrente, Open[0] è l'apertura corrente e così via

tkuan77:
Ciao a tutti, vorrei controllare come faccio a ottenere l'ultimo prezzo corrente sul grafico? So che è noob, ma non riesco a trovare il ans. Per favore aiutatemi. Grazie.

Per quanto riguarda

Terrance
 

Ciao Mladen, Quello che sto cercando di fare è un controllo. Ad esempio, se il prezzo corrente è al di sopra della SMA 100, faccio uno zoom verso il basso su un time frame inferiore e guardo solo il segnale di acquisto. Ma se uso Bid o Ask, il sistema non può decidere se al momento sto guardando long o short, dato che Bid dovrei cercare long e viceversa per Ask (correggimi se sbaglio qui).

Il concetto che avevo in mente è in qualche modo simile al sistema di trading delle 3 anatre sulla parte di controllo. Per favore consigliatemi qui. Grazie.

Saluti

Terrance

mladen:
Dipende da quale:
- l'attuale prezzo bid è Bid

- l'attuale prezzo ask è Ask

- qualsiasi altro prezzo: usa l'indice zero per il prezzo corrente, quindi Close[0] è la chiusura corrente, Open[0] è l'apertura corrente e così via

 

...

Terrance

Usa Close[0] in questo caso. Quasi tutti gli EA usano la chiusura per questo scopo, quindi penso che funzionerà anche per te

tkuan77:
Ciao Mladen, Quello che sto cercando di fare è un controllo. Ad esempio, se il prezzo corrente è al di sopra della SMA 100, faccio uno zoom verso il basso su un time frame inferiore e guardo solo il segnale di acquisto. Ma se uso Bid o Ask, il sistema non può decidere se al momento sto guardando long o short dato che Bid dovrei cercare long e viceversa per Ask (correggimi se sbaglio qui).

Il concetto che avevo in mente è in qualche modo simile al sistema di trading delle 3 anatre sulla parte di controllo. Per favore consigliatemi qui. Grazie.

Saluti

Terrance
 

EA non funziona tra i prezzi in movimento

Ho notato che il mio EA non viene eseguito tra i movimenti di prezzo nel time frame M1. So che l'EA sarà eseguito ogni tick in arrivo.

Ma ho visto che viene eseguito ogni volta che inizia una nuova barra.

Ho capito male?

C'è un modo per forzare l'ea ad attivare ogni tick in arrivo?

Cerco di controllare i miei profitti e perdite usando i profitti e le perdite non in pip. Quando si verifica un picco, l'EA non chiude l'ordine quando raggiunge l'impostazione dei profitti o delle perdite fino a quando non si verifica una nuova barra.

Qualcuno mi aiuti a risolvere questo problema.

Sono nuovo per la codifica degli EA.

Grazie in anticipo.