Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 27

 
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;
// 
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;
  }

Se dovete chiudere su condizioni separate, e non tutte insieme, allora la funzione di chiusura dovrebbe essere diversa.
 
Natashe4ka:

Sbagliato.
Dovresti avere la condizione all'inizio e la funzione di chiusura all'inizio.

Se avete bisogno di chiudere per condizioni individuali e non tutte insieme, allora la funzione di chiusura dovrebbe essere diversa.

Giusto, ma l'ho già fatto e gliel'ho mandato, quindi non dirà nulla.

int start()
{
    //закрытие по МА-шкам
   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);
                          }
                     }
               }
         }
   }
 
Renat Akhtyamov,Natashe4ka grazie mille.

 
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
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?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
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;

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;
 
Vitalie Postolache:


Capito, grazie, vediamo cosa succede.
 
Vitalie Postolache:

È 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;

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;
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...
 

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?
 
Vladimir Karputov:

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.

 
Vladimir Karputov:

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?
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.
Motivazione: