Questions des débutants MQL4 MT4 MetaTrader 4 - page 27

 
Movlat Baghiyev:
La condition de fermeture utilise un signal inverse, mais cela ne fonctionne pas. Nos transactions ne sont fermées qu'au stop ou au takei. Quelle est votre raison ?

Faux.
Votre condition doit être au début et la fonction de fermeture après le début.

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

Si vous devez fermer sur des conditions distinctes, et non pas toutes en même temps, alors la fonction de fermeture doit être différente.
 
Natashe4ka:

Faux.
Vous devriez avoir la condition au début et la fonction de fermeture au début.

Si vous devez fermer par conditions individuelles et non pas toutes en même temps, alors la fonction de fermeture doit être différente.

Oui, mais je l'ai déjà fait et je lui ai envoyé, alors il ne dira rien.

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, merci beaucoup.

 
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
C'est ainsi que le lot est calculé.MaximumRisk==100 . j'ai besoin que le lot soit calculé automatiquement au maximum .J'ai écrit MaximumRisk==100 pour calculer le lot maximum possible à l'ouverture de la transaction. Combien de fois est-ce correct ?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
Voici une variante du calcul du lot .MaximumRisk==100 . J'ai besoin qu'il soit calculé automatiquement pour chaque lot .J'ai prescrit MaximumRisk==100 pour calculer le lot maximum possible à l'ouverture de la transaction.

Il est préférable de compter en fonction des fonds disponibles plutôt que du solde. Sinon, vous risquez d'obtenir beaucoup plus que ce que vous pouvez vous permettre au moment d'ouvrir une transaction.

Vous devez également déterminer la dépendance de l'étape du lot, puis vérifier si le lot est dans les limites des lots maximum et minimum autorisés sur le compte.

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:


Je l'ai. Merci. Voyons ce qui se passe.
 
Vitalie Postolache:

Il est préférable de compter en fonction des fonds disponibles plutôt que du solde. Sinon, vous risquez d'obtenir beaucoup plus que ce que vous pouvez vous permettre au moment d'ouvrir une transaction.

Vous devez également déterminer la dépendance de l'étape du lot, puis vérifier si le lot est dans les limites des lots maximum et minimum autorisés sur le compte.

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;
Cette option ne fonctionne pas comme elle le devrait... Ouvrir une affaire avec le maximum de lot possible, et après avoir fermé la seconde n'ouvre pas la seconde écrit pas assez d'argent....
 

Reporté :

Gevorg Hakobyan, 2016.12.08 15:26

Bonjour. Comment puis-je obtenir une liste de toutes les paires de devises existantes dans Meta Trader 4 ? Et comment puis-je me tenir au courant de tout changement dans la liste ?
 
Vladimir Karputov:

Reporté :

Gevorg Hakobyan, 2016.12.08 15:26

Bonjour. Comment puis-je obtenir la liste de toutes les paires de devises existant dans Meta Trader 4 ? Et comment être au courant de tout changement dans la liste ?

SymbolesTotal

Renvoie le nombre de symboles disponibles (sélectionnés dans MarketWatch ou tous).

intSymbolsTotal(
bool selected// true - seulement les symboles dans MarketWatch
) ;

Paramètres

sélectionné

[Mode de demande. Peut prendre les valeurs true ou false.

Valeur retournée

Si selected est vrai, le nombre de caractères sélectionnés dans MarketWatch est renvoyé. Si elle est fausse, elle renvoie le nombre total de tous les symboles.

 
Vladimir Karputov:

Reporté :

Gevorg Hakobyan, 2016.12.08 15:26

Bonjour. Comment puis-je obtenir une liste de toutes les paires de devises existantes dans Meta Trader 4 ? Et comment puis-je me tenir au courant de tout changement dans la liste ?
Et de ce qui est transféré, il est impossible d'écrire du code qui fonctionnera multiplateforme, il n'y a pas de différence dans la tâche d'obtenir les symboles dans les deux plates-formes.
Raison: