![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
La condizione di chiusura usa un segnale inverso, ma non funziona yI nostri trade sono chiusi solo allo stop o al takei. Qual è la tua ragione?
Sbagliato.
La tua condizione dovrebbe essere all'inizio e la funzione di chiusura dopo l'inizio.
int i;
//
void Start(){
if ((FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) // тут так надо бы Bid<NormalizeDouble(FMA1-Distanse*GetPoint(),Digits)
|| (FRMA1>GrossMA1 && FRMA2<GrossMA2 && Ask>FRMA1+Distanse*GetPoint())){
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) CloseOpBuySell(); // тут закроются все ордера и бай и селл
}
}
}// end start
void CloseOpBuySell()
{
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic ) //свой магик
{
if(OrderType()==OP_BUY)
{
if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,LawnGreen); {continue;}
}
if(OrderType()==OP_SELL)
{
if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,LawnGreen); {continue;}
}
}
}
}
return;
}
Sbagliato.
Se avete bisogno di chiudere per condizioni individuali e non tutte insieme, allora la funzione di chiusura dovrebbe essere diversa.Dovresti avere la condizione all'inizio e la funzione di chiusura all'inizio.
Giusto, ma l'ho già fatto e gliel'ho mandato, quindi non dirà nulla.
{
//закрытие по МА-шкам
if (FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) CloseOpBuySell("BUY");
if (FRMA1>GrossMA1 && FRMA2<GrossMA2 && Ask>FRMA1+Distanse*GetPoint()) CloseOpBuySell("SELL");
return(0);
}
//----
//-----------------------------------+
void CloseOpBuySell(string TypeClose)
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn )
{
if(TypeClose=="BUY")
{
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,LawnGreen);
}
if(TypeClose=="SELL")
{
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,LawnGreen);
}
}
}
}
}
È meglio contare in base ai fondi disponibili piuttosto che al saldo. Altrimenti, si rischia di ottenere molto di più di quello che ci si può permettere al momento di aprire uno scambio.
Devi anche calcolare la dipendenza del passo del lotto, e poi controllare se il lotto è all'interno dei lotti massimi e minimi consentiti nel conto.
double lots,lotstep,free,margin, lotmin, lotmax;
lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();
lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);
if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
È meglio contare in base ai fondi disponibili piuttosto che al saldo. Altrimenti, si rischia di ottenere molto di più di quello che ci si può permettere al momento di aprire uno scambio.
Devi anche calcolare la dipendenza del passo del lotto, e poi controllare se il lotto è all'interno dei lotti massimi e minimi consentiti nel conto.
double lots,lotstep,free,margin, lotmin, lotmax;
lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();
lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);
if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
Rinviato:
Gevorg Hakobyan, 2016.12.08 15:26
Salve. Come posso ottenere una lista di tutte le coppie di valute esistenti in Meta Trader 4? E come posso tenermi aggiornato su eventuali cambiamenti nella lista?Rinviato:
Gevorg Hakobyan, 2016.12.08 15:26
Salve. Come posso ottenere la lista di tutte le coppie di valute esistenti in Meta Trader 4? E come essere a conoscenza di eventuali cambiamenti nella lista?SimboliTotale
Restituisce il numero di simboli disponibili (selezionati in MarketWatch o tutti).
intSymbolsTotal(
bool selected// true - solo simboli in MarketWatch
);
Parametri
selezionato
[Modalità di richiesta. Può assumere i valori vero o falso.
Valore restituito
Se selected è vero, viene restituito il numero di caratteri selezionati in MarketWatch. Se falso, restituisce il numero totale di tutti i simboli.
Rinviato:
Gevorg Hakobyan, 2016.12.08 15:26
Salve. Come posso ottenere una lista di tutte le coppie di valute esistenti in Meta Trader 4? E come posso tenermi aggiornato su eventuali cambiamenti nella lista?