Come codificare? - pagina 69

 

Ciao Wolfe

wolfe:
So che questo è stato trattato prima, ma qualcuno può mostrarmi del codice per permettere solo 1 trade per barra? Grazie.

Questo funziona per me

datetime LastOpenTime=0;

//////////////////////////////////////////

int Ordine;

for(int t=0;t<OrdiniTotali();t++)

{

if(OrderSelect(t, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumbers && OrderType() == OP_SELL)

{

if(OrderOpenTime()>LastOpenTime)LastOpenTime=OrderOpenTime();

}

}

}

Poi lo inserisco semplicemente nel mio codice

if(LastOpenTime0)

{ OrderSend(blah blah

Time[0] è l'inizio della candela del tuo timeframe quindi assicurati di scegliere il timeframe giusto

 
waltini:
Questo funziona per me

datetime LastOpenTime=0;

//////////////////////////////////////////

....................

Time[0] è l'inizio della candela del tuo timeframe, quindi assicurati di scegliere il timeframe giusto

Questo è un po' più semplice:

datetime LastOpenTime; //Global var

[/CODE]

[CODE]

int init()

{

LastOpenTime=Time[0];

}

int start()

{

................

if(LastOpenTime!=Time[0])

{

// do your trade code

LastOpenTime=Time[0];

}

..............

return(0);

}

Il vostro "trade code" sarà eseguito una sola volta su qualsiasi candela. Non ci sarà più alcun trade su quella candela anche se chiudete il vostro MT4 e lo riaccendete. Ma si prega di notare, diciamo che si attiva l'EA su una candela delle 5 del pomeriggio, non ci sarà alcun commercio anche su quella candela, è necessario attendere la prossima candela.

 
wolfe:
So che questo è stato coperto prima, ma qualcuno può mostrarmi del codice per permettere solo 1 scambio per barra? Grazie.

Globale, metti questo prima di init()

datetime PreviousBar;[/CODE]

In the order placement and/or order close stuff, wrap it in this:

if(NewBar() == true)

{

if blah blah blah, gimme pips // not actual functions but you get the idea

if blah blah blah, close orders // um

}

Common function outside main loop:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}
 

Aiuto sulla programmazione

Ciao,

Ho fatto del mio meglio per provare a programmare alcune cose, ma ho colpito un muro di mattoni. Così ho provato qualcosa di molto semplice. Se decommento "Print("Five");" e provo il programma, stampa solo "Yahooooooo". (Beh, stampa anche "Uno"). Ora con "Print("Five");" commentato, anche lo "Yahooooooo" non viene stampato. Cosa mi manca?

File:
trial.mq4  2 kb
 

Chiudere tutti gli ordini pendenti e aperti quando 1 trade ha colpito il TP

Ciao,

Sto cercando di scrivere un codice nel mio EA che chiuderà tutti gli ordini pendenti e aperti una volta che c'è 1 commercio che ha colpito TP. Di seguito è riportato il codice che ho usato, ma sembra non funzionare. Qualcuno può dare un'occhiata e consigliare cosa manca. Grazie.

if( PreviousOpenOrders > OpenOrders )

{

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

mode = OrderType();

if( OrderSymbol() == Symbol() &&

OrderMagicNumber()==Magic)

{

if( mode == OP_BUY ) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue);

if( mode == OP_SELL ) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red);

if (mode == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (mode == OP_BUYLIMIT) OrderDelete(OrderTicket());

}

}

}

}

 

Utilizzare rispettivamente Bid e Ask invece di OrderClosePrice()...

 
ralph.ronnquist:
Usa rispettivamente Bid e Ask invece di OrderClosePrice()...

Ciao Ralph,

puoi aiutarmi a fare un esempio. Grazie per l'aiuto.

 
timebandit:
Ciao, ho fatto del mio meglio per provare a programmare alcune cose, ma ho colpito un muro di mattoni. Così ho provato qualcosa di molto semplice. Se decommento "Print("Five");" e provo il programma, stamperà solo "Yahooooooo". (Beh, stampa anche "Uno"). Ora con "Print("Five");" commentato, anche lo "Yahooooooo" non viene stampato. Cosa mi manca?

Se non usate le parentesi, viene eseguita solo una linea. Dipende da quello che vuoi fare, ma dovresti fare così:

if(d>5)

{

Print("Five");

Print("Yahoooooooooooooooooooooooo");

}
 

if( mode == OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Blue);

if( mode == OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Red);

 

Spostare lo stop una volta

Ecco il mio pezzo di codice per spostare lo stoploss a pareggio dopo un certo profitto. C'è qualcosa di sbagliato?

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() == Point * MoveStopWhenPrice) {

OrderModify(OrderTicket(),OrderOpenPrice(), Bid - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}