![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ciao 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
Questo funziona per me
datetime LastOpenTime=0;
//////////////////////////////////////////
....................
Time[0] è l'inizio della candela del tuo timeframe, quindi assicurati di scegliere il timeframe giustoQuesto è 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.
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()
In the order placement and/or order close stuff, wrap it in this:
{
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?
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()...
Usa rispettivamente Bid e Ask invece di OrderClosePrice()...
Ciao Ralph,
puoi aiutarmi a fare un esempio. Grazie per l'aiuto.
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ì:
{
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?
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() == Point * MoveStopWhenPrice) {
OrderModify(OrderTicket(),OrderOpenPrice(), Bid - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}