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

 
Vitalie Postolache:


Je dirai la même chose. Vous n'êtes pas bon en logique. Quel est le problème pour calculer immédiatement le lot initial, sur la base des fonds disponibles et de la valeur du risque (je crois qu'il a été écrit environ 3%) ? Pourquoi devez-vous tout faire au même endroit ?

Prenez la valeur de la marge libre, multipliez-la par le risque, divisez-la par 100 et obtenez la valeur de la marge pour 1 lot. Voici la formule la plus simple pour calculer le lot avec un pourcentage déterminé de la marge libre. Vous devez également tenir compte de l'étape de changement de lot et éviter de dépasser la taille de lot minimale/maximale, autorisée par la société de courtage :


Je vous dis que l'EA négocie dans une courte période de temps dans laquelle il y a une probabilité que 9 ordres opposés consécutifs se chevauchant s'ouvrent et chaque ordre suivant est multiplié par 2, donc la marge peut ne pas tenir et le dernier ordre en attente peut ne pas s'ouvrir, et donc nous devons calculer à partir du dernier lot maximum possible. Je me suis dit que le meilleur nombre d'ordres dans un intervalle de 5 à 10 minutes est de 9. En général, j'ai besoin de calculer une marge au cas où tous les ordres seraient ouverts et sur la base de ces données en ordre inverse pour calculer le premier lot.

 
si(OrdersTotal() >= OrderCount)
{
retour ;
}
//----
si(r > 50 && p > m) //ouverture d'un ordre d'achat
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green) ; //ouvre un ordre d'achat
}
//-----
si(r < 50 && p < m) //ouverture des conditions de l'ordre de vente
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue) ;
}
//----- ordres de fermeture
for (int i=1 ; i<=OrdersTotal() ; i++)
{
si(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
si(r < 50 && p < m)
{
OrdreClose(ticketB,0.1,Bid,5,Red) ;
}
}

}

Je pense que je l'ai pris dans un exemple, pourriez-vous me dire comment l'épeler correctement pour que la commande soit clôturée ?

sur les conditions d'achat inversées ? Je me creuse les méninges.

 
funnyrain8:
si(OrdersTotal() >= OrderCount)
{
retour ;
}
//----
si(r > 50 && p > m) //ouverture d'un ordre d'achat
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green) ; //ouvre un ordre d'achat
}
//-----
si(r < 50 && p < m) //ouverture des conditions de l'ordre de vente
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue) ;
}
//----- ordres de fermeture
for (int i=1 ; i<=OrdersTotal() ; i++)
{
si(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
si(r < 50 && p < m)
{
OrdreClose(ticketB,0.1,Bid,5,Red) ;
}
}

}

Je pense que je l'ai pris dans un exemple, pourriez-vous me dire comment l'épeler correctement pour que la commande soit clôturée ?

sur les conditions d'achat inversées ? Je me creuse les méninges.


 if(OrdersTotal()>=OrderCount)  //Обрати внимание на эту конструкцию
     {                            //
      return;
     }
//---- 
   if(r>50 && p>m) //условия открытия ордера на покупку
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
               OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
      ticketB=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     

     }

//-----     
   if(r<50 && p<m) //условия открытия ордера на продажу
     {
     for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
               OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
      ticketS=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue);
     }

Comme ceci
 
funnyrain8:
si(OrdersTotal() >= OrderCount)
{
retour ;
}
//----
si(r > 50 && p > m) //ouverture d'un ordre d'achat
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green) ; //ouvre un ordre d'achat
}
//-----
si(r < 50 && p < m) //ouverture des conditions de l'ordre de vente
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue) ;
}
//----- ordres de fermeture
for (int i=1 ; i<=OrdersTotal() ; i++)
{
si(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
{
si(r < 50 && p < m)
{
OrdreClose(ticketB,0.1,Bid,5,Red) ;
}
}

}

Je pense que je l'ai pris dans un exemple, pourriez-vous me dire comment l'épeler correctement pour que la commande soit clôturée ?

sur les conditions d'achat inversées ? Je me creuse les méninges.


Si la commande est sélectionnée sur le ticket, vous n'avez pas besoin d'action dans la boucle. Si vous souhaitezcorriger le code, utilisez le bouton SRC pourcoller le code dans le message.
 
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict    
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int ticketB,ticketS;
void OnTick()
//------------------------------------------------------------------------------------------------
{
double p = iClose("EURUSD",PERIOD_M15,0);                                    //показание текущей цены 
double r = iRSI  ("EURUSD",PERIOD_M15,21,PRICE_CLOSE,0);                     //значение индюка RSI
double m = iMA   ("EURUSD",PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,0);          //значение индюка МА
int    OrderCount  = 1;

//---------------ПОДСЧЕТ ОРДЕРОВ------------------------------------------------------------------
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//-------------ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ--------------------------------------------------------------------
/*if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green);         
    }
//------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------
if(r<50 && p<m)                                                           
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
                  ticketB = OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
     }*/
//------------------ОТКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//---------------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r>50 && p>m) 
     {
   for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketS,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
                  ticketS = OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
     }
}
//+------------------------------------------------------------------+
Merci pour le SRC), c'est ce à quoi cela ressemble, ts ressemble à ceci, la vente devrait se produire lorsque la bougie a fermé en dessous du wop et le rsi est en dessous de 50, et fermer l'ordre à des conditions opposées, et au même moment après la fermeture l'achat devrait se produire et après la fermeture, puis un ordre et pas plus et ainsi de suite de façon cyclique ... mais maintenant j'ai un ordre ouvert et c'est tout, et les arrêts ne fonctionnent pas ...
 
funnyrain8:
Merci pour le SRC), c'est à cela que ça ressemble, ts ressemble à cela, la vente devrait se produire lorsque la bougie a fermé en dessous du poignet et rsi en dessous de 50, et de fermer l'ordre aux conditions opposées, et dans le même temps après la fermeture devrait se produire l'achat et après la fermeture, puis un ordre et pas plus et ainsi de suite de façon cyclique ... mais maintenant, j'ouvre un ordre et tous, et les arrêts ne fonctionnent pas ...


Je l'ai réécrit dans mon propre style, j'espère que vous comprenez, si quelque chose n'est pas clair, n'hésitez pas à demander.

//+------------------------------------------------------------------+
//|                                                   funnyrain8.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict

input int             MagicNumber  = 20110315;       // Номер копии
input string          CommentOrder = "Origenal";     // Комментарий к ордеру
input int             Slippage=100;             // Проскальзование (Пипс)
input double          Lot=0.01;           // Объем лота 
input int             SignalBar=0; // Сигнальный бар 

sinput string            s1=NULL; // Setting indicator slow МА
input int                ma_period=89;    // Period
input ENUM_MA_METHOD     ma_method=MODE_EMA;//Method calculation
input ENUM_APPLIED_PRICE ma_price=PRICE_CLOSE;//Price calculation

sinput string            s2=NULL; // Setting indicator RSI
input int                rsi_period=21; // Period
input ENUM_APPLIED_PRICE rsi_price=PRICE_CLOSE;//Price calculation
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(TotalOrder()==0)OrderOpen(GetSignal());
   else OrderClose(GetSignal());
  }
//+------------------------------------------------------------------+
int GetSignal()
  {
   double rsi = iRSI(_Symbol,PERIOD_CURRENT,rsi_period,rsi_price,SignalBar);                     //значение индюка RSI
   double ma = iMA   (_Symbol,PERIOD_CURRENT,ma_period,0,ma_method,ma_price,SignalBar);          //значение индюка МА

   if(Close[SignalBar]>ma && rsi>50.0)return(OP_BUY);
   if(Close[SignalBar]<ma && rsi<50.0)return(OP_SELL);
   return(WRONG_VALUE);
  }
//+------------------------------------------------------------------+
int TotalOrder()
  {
   int value=0;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderType()>1)continue;
      value++;
     }
   return(value);
  }
//+------------------------------------------------------------------+
void OrderOpen(int type)
  {
   if(type==WRONG_VALUE)return;
   double price_open=(type==OP_BUY)?NormalizeDouble(Ask,_Digits):NormalizeDouble(Bid,_Digits);
   int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
   if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
  }
//+------------------------------------------------------------------+
void OrderClose(int type)
  {
   if(type==WRONG_VALUE)return;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderType()!=type)continue;
      double price_close=(type==OP_BUY)?NormalizeDouble(Bid,_Digits):NormalizeDouble(Ask,_Digits);
      bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
      if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
     }
  }
//+------------------------------------------------------------------+

...

 
Sergey Gritsay:


réécrit dans mon propre style, j'espère que vous comprenez, si vous ne comprenez pas quelque chose demandez moi

...


oh, je pensais avoir presque tout écrit sauf la conclusion et j'ai encore beaucoup à apprendre...merci beaucoup maintenant au moins j'ai un exemple pour continuer...tin, merci encore)
 
Bonjour. J'ai téléchargé le logiciel Metatrader 5. Je me suis inscrit pour 2 signaux. Le solde de mon compte est positif de 20$. J'essaie d'installer un hébergement virtuel et rien ne fonctionne. J'appuie sur le navigateur, je me connecte au compte de trading, je n'ai même pas d'onglet de ce type dans la table d'hébergement virtuel. Je vous envoie des captures d'écran. Comment puis-je me connecter à l'hébergement partagé ?
Dossiers :
3p46y0.jpg  273 kb
g4ppe22.jpg  264 kb
 
Жанна Платонова:
Bonjour. J'ai téléchargé le logiciel Metatrader 5. Je me suis inscrit pour 2 signaux. Le solde de mon compte est positif de 20$. J'essaie d'installer un hébergement virtuel et rien ne fonctionne. J'appuie sur le navigateur, je me connecte au compte de trading, je n'ai même pas d'onglet de ce type dans la table d'hébergement virtuel. Je vous envoie des captures d'écran. Comment puis-je me connecter à l'hébergement partagé ?

Cliquez sur Aide dans le menu principal.
 
Bonjour. J'ai une question - sur le mac (sierra) dans tous les livrés (à travers le vin) de différentes sociétés plates-formes mt4 le même pépin - le terminal si vous le libérer de sa place normale en bas pour le déplacer comme une fenêtre libre - il se rétrécit et le travail à travers elle est complètement impossible. La désactivation de l'arrangeur automatique ne fonctionne pas. Le retour du terminal sur l'ancien emplacement est absolument impossible - c'est-à-dire qu'il ne s'attache tout simplement pas et ne s'ouvre plus. J'ai une question : quelqu'un connaît-il un raccourci ou un bouton permettant de remettre toute l'interface à sa place initiale ? Sincèrement.