Movlat Baghiyev: 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; // voidStart(){
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(); // тут закроются все ордера и бай и селл } }
Questo è il modo in cui viene calcolato il lotto.MaximumRisk==100. Ho bisogno che il lotto sia calcolato automaticamente al massimo.Ho scritto MaximumRisk==100 per calcolare il massimo lotto possibile all'apertura del trade, quante volte è corretto?
Ecco una variante del calcolo del lotto.MaximumRisk==100. Ho bisogno che sia calcolato automaticamente per ogni lotto.Ho prescritto MaximumRisk==100 per calcolare il massimo lotto possibile all'apertura del trade.
È 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.
int MaximumRisk=100; double lots,lotstep,free,margin, lotmin, 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.
int MaximumRisk=100; double lots,lotstep,free,margin, lotmin, lotmax;
if (lots < lotmin) lots = lotmin; if (lots > lotmax) lots = lotmax;
Questa opzione non funziona come dovrebbe... Aprire un affare con il massimo lotto possibile, e dopo aver chiuso il secondo non aprire il secondo scrive non abbastanza soldi...
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?
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.
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?
E da quello che viene trasferito, è impossibile scrivere codice che funzionerà cross-platform, non c'è differenza nel compito da ottenere i simboli nelle due piattaforme.
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?