Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1286

 
MakarFX:

Dites-moi, s'il vous plaît, est-il possible de faire ce choix de police dans un indicateur ?


Pourquoi pas ? Faites votre propre enum et tous les problèmes.........

 
Alexey Viktorov:

Pourquoi pas ? Faites votre propre enum et tous les problèmes.........

C'est clair, mais comment demander une liste des polices installées ?

 
Nikolai Semko:

Vous êtes un comédien.

A qui je parlais ?


J'ai raté quelque chose. Merci. (gloussements) C'est ça !

 
ANDREY:

Je l'ai. Merci pour votre aide.

Je pensais aussi qu'il était difficile pour l'EA d'ouvrir autant d'ordres. J'ai essayé de limiter le nombre de commandes avec ce code

C'est-à-dire, ouvrir un ordre seulement à 10h00. Mais le résultat est le même.

2020.10.27 10:25:17.548 Core 1 272 Mb de mémoire utilisée dont 36 Mb de données d'historique, 64 Mb de données tick



Je ne connais pas bien MKL5, pour être honnête. Mais la logique est boiteuse. Vous devez ouvrir une commande. Pour ce faire, vous affectez une variable horaire au début de la fonction sur le tic-tac et à la fin, vous l'affectez à une autre variable. Au milieu, si les variables ne sont pas égales, vous ouvrez un ordre. L'exemple ci-dessus avec les minutes est le même.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

C'est clair, mais comment demander une liste des polices installées ?

Je pense que dans votre exemple, il s'agit d'une liste faite maison. Sans interroger le logiciel.

 
Valeriy Yastremskiy:

Je ne connais pas bien MKL5, pour être honnête. Mais la logique est boiteuse. Vous avez besoin d'une commande pour ouvrir le même. Pour ce faire, vous affectez une variable horaire au début de la fonction sur le tic-tac et à la fin, vous l'affectez à une autre variable. Au milieu, si les variables ne sont pas égales, vous ouvrez un ordre. L'exemple ci-dessus avec les minutes est le même.

c'est pourquoi il est recommandé d'essayer de faire le travail d'EA uniquement avec vos magiks

Si notre tâche consiste à ouvrir un ordre à une certaine heure une fois par jour, l'algorithme est le suivant :

- démarrer l'EA, il vérifie le nombre d'ordres ouverts, si l'ordre avec notre magicien est ouvert, alors sortir jusqu'au prochain tick

- s'il n'y a pas d'ordre, l'EA attend que l'heure et les minutes actuelles soient supérieures aux valeurs données.

- ce moment est arrivé, EA va vérifier l'historique des ordres et s'il n'y a pas eu d'ordre placé avec notre magicien pendant les dernières 24 heures, alors il placera un ordre et sortira - la sortie est utile pour ne pas traiter les erreurs de serveur, si l'ordre n'a pas été placé, alors au prochain tick nous essaierons de le refaire, c'est-à-dire que nous n'avons pas besoin d'organiser un cycle pour de multiples ouvertures d'ordre sur ce tick.... mais c'est une question de goût et d'objectifs, c'est la mise en œuvre la plus facile ;))

 
Igor Makanu:

c'est pourquoi il est recommandé d'essayer de faire le travail d'EA exclusivement avec vos magiciens

Si la tâche consiste à ouvrir un ordre une fois par jour à une heure donnée, l'algorithme est le suivant :

- démarrer l'EA, il vérifie le nombre d'ordres ouverts, si l'ordre avec notre magicien est ouvert, alors sortir jusqu'au prochain tick

- s'il n'y a pas d'ordre, l'EA attend que l'heure et les minutes actuelles soient supérieures aux valeurs données.

- ce moment est arrivé, EA va vérifier l'historique des ordres et s'il n'y a pas eu d'ordre placé avec notre magicien pendant les dernières 24 heures, alors il placera un ordre et sortira - la sortie est utile pour ne pas traiter les erreurs de serveur, si l'ordre n'a pas été placé, alors au prochain tick nous essaierons de le refaire, c'est-à-dire que nous n'avons pas besoin d'organiser un cycle pour de multiples ouvertures d'ordre sur ce tick.... Mais c'est une question de goût et d'objectifs et c'est la mise en œuvre la plus facile ;)))

Nous n'avons pas encore atteint le niveau du magicien là-bas. Bien sûr. En 5 c, bien sûr, le dilemme est de savoir s'il faut boucler avec l'analyse des erreurs ou essayer d'ouvrir une position en utilisant un tick. Dans le cas de réponses longues, cela peut être plus facile pour le coche.

 
Valeriy Yastremskiy:

Je ne connais pas bien MKL5, pour être honnête. Mais la logique est boiteuse. Vous avez besoin d'une commande pour ouvrir le même. Pour ce faire, vous affectez une variable horaire au début de la fonction sur le tick et à la fin vous l'affectez à une autre variable. Au milieu, si les variables ne sont pas égales, vous ouvrez un ordre. L'exemple ci-dessus avec les minutes est le même.



Merci beaucoup. Les connaissances que vous m'avez transmises étaient exactement ce qui me manquait. J'ai essayé de faire la même chose mais par analogie avec le 4. Il s'avère que l'analogie est mal placée dans ce cas.
Merci encore.

 
Igor Makanu:

c'est pourquoi il est recommandé d'essayer de faire le travail d'EA exclusivement avec vos magiciens

Si la tâche consiste à ouvrir un ordre une fois par jour à une heure donnée, l'algorithme est le suivant :

- démarrer l'EA, il vérifie le nombre d'ordres ouverts, si l'ordre avec notre magicien est ouvert, alors sortir jusqu'au prochain tick

- s'il n'y a pas d'ordre, l'EA attend que l'heure et les minutes actuelles soient supérieures aux valeurs données.

- ce moment est arrivé, EA va vérifier l'historique des ordres et s'il n'y a pas eu d'ordre placé avec notre magicien pendant les dernières 24 heures, alors il placera un ordre et sortira - la sortie est utile pour ne pas traiter les erreurs de serveur, si l'ordre n'a pas été placé, alors au prochain tick nous essaierons de le refaire, c'est-à-dire que nous n'avons pas besoin d'organiser un cycle pour de multiples ouvertures d'ordre sur ce tick.... mais c'est une question de goût et d'objectifs et c'est la mise en œuvre la plus facile ;)))

Merci pour ces informations précieuses. Grâce à vous, ma compréhension de mql 5 a augmenté et s'est approfondie.
Je vous serai très reconnaissant si vous pouvez montrer mon code comme exemple de votre processus de réflexion. Cela m'aidera à assimiler votre idée rapidement et avec précision.
Encore une fois, merci beaucoup.

Voici mon code, dans lequel j'ai incorrectement écrit la condition selon laquelle un ordre ne doit s'ouvrir qu'à 10:00

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

Voici mon code où j'ai mal formulé la condition, selon laquelle l'ordre ne doit s'ouvrir qu'à 10h00

Je n'écris pas en MQL5 pur. Vous pouvez passer un ordre en utilisant la classe SB de CTrade.

recherchez sur CTrade des articles sur l'utilisation de SB