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

 
Igor Makanu:

J'ai écrit plus haut, à propos du niveau des questions ;)

et vous avez commencé à chercher l'optimalité de l'initialisation dans OnTick/OnInit - tout y est plus simple, vous avez besoin de protéger le code trouvé pour le partager avec les mêmes amis )))).

Je vois, alors un toast : aux "amis" retrouvés !

 
Igor Makanu:

Besoin de protection pour le code trouvé à partager avec des amis similaires ))))

C'est très bien dit. On a probablement l'air d'intellos, mais on s'amuse !

 
Vitaly Muzichenko:

Eh bien, c'est la limite de tout :(


Vitaly, c'est quoi cette négativité ? L'homme demande juste de le troller, il faut le respecter).

Igor Makanu:

J'ai écrit plus haut, à propos du niveau des questions ;)

et vous avez commencé à chercher l'optimalité de l'initialisation dans OnTick/OnInit - tout y est plus simple, il faut protéger le code trouvé, pour le partager avec les mêmes amis ;)))

))))

 
Aleksey Mavrin:

Vitaly, c'est quoi cette négativité ? L'homme ne demande qu'à être trollé, vous devriez le respecter).

))))

Ok, un peu de positivité.

 
Bonjour, pourriez-vous me conseiller ? Lemanuel indique que l'événement Initde est traité par la fonction OnInit(). Cet événement est également généré après un changement d'instrument financieret/ou de période graphique.

Ici, j'ai un code simple. Lorsque je change de cadre temporel, la fonction fonctionne, mais pas lorsque je change d'instrument. Ou peut-être ai-je mal compris le terme "changement d'instrument financier" ?

int OnInit()
  {
    Print("HALLO");
    return(INIT_SUCCEEDED);
  }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
WinProject:
Bon moment, pourriez-vous me conseiller. Le manuel indique que l'événement Init de est géré par la fonction OnInit(). Cet événement est également généré après un changement d'instrument financieret/ou de période graphique.

Ici, j'ai un code simple. Lorsque je change de cadre temporel, la fonction fonctionne, mais pas lorsque je change d'instrument. Ou peut-être ai-je mal compris le terme "changement d'instrument financier" ?

int OnInit()
  {
    Print("HALLO Period()= ",Period(),"Symbol()=",Symbol());
    return(INIT_SUCCEEDED);
  }

Pour une perception correcte, il est préférable de procéder comme suit. Si vous mettez un nouveau symbole sur le graphique, OnDynit devrait fonctionner et commencer avec OnInit.

 
Valeriy Yastremskiy:

Pour des raisons de fidélité, c'est mieux comme ça. Si vous mettez un nouveau symbole sur le graphique, OnDeinit devrait fonctionner et commencer par OnInit

Merci, cela fait tellement d'années que j'utilise le terminal et je ne savais pas que l'on pouvait passer à un graphique à partir d'une vue d'ensemble du marché, je pensais que changer un instrument financier était un passage à une fenêtre graphique avec un instrument différent.

 

Bonjour, pouvez-vous me dire s'il s'agit d'un bug ou si je me trompe ?

J'ai effectué quelques calculs, que vous pouvez également obtenir grâce à des fonctions prêtes à l'emploi, et j'ai remarqué une différence.

Je calculais la marge, et dans le testeur le calcul de la marge et AccountInfoDouble(ACCOUNT_MARGIN) donnent des résultats différents, et il n'y a pas de différence dans la démo.

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
 

input double lot=0.1;
input int plecho=100;
input double lot_increment=1; //увеличение лота
input int level_size=50;
input int Magic = 0;
input int deviation = 10; //допустимое проскальзывание

double margin, margin_free, uroven, sredstva_pri_s_o, margin_call, stop_out;
int N;



int OnInit(){

Print("Bid ", Bid);

int ticket=OrderSend(NULL, OP_BUY, lot, Ask, 0, 0, 0, "", Magic, 0);
    //ticket=OrderSend(NULL, OP_SELL, lot, Bid, 0, 0, 0);


Print("  ACCOUNT_MARGIN ", AccountInfoDouble(ACCOUNT_MARGIN)
, "  ACCOUNT_MARGIN_LEVEL ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));

margin=(OrderLot()*100000*OrderPrice())/plecho;
Print("OrderLot() ", OrderLot(), "  OrderPrice() ", OrderPrice());
margin_free=AccountInfoDouble(ACCOUNT_EQUITY)-margin;
uroven=(AccountInfoDouble(ACCOUNT_EQUITY)/margin)*100;
sredstva_pri_s_o=(margin*AccountInfoDouble(ACCOUNT_MARGIN_SO_SO))/100;
N=(int)NormalizeDouble((AccountInfoDouble(ACCOUNT_BALANCE)-sredstva_pri_s_o)
/MarketInfo(Symbol(), MODE_TICKVALUE), 0);
stop_out=OrderPrice()-(N*Point());

Print("stop_out ", stop_out, "  margin ", margin, "  uroven ", uroven
, "  ACCOUNT_MARGIN_SO_SO ", AccountInfoDouble(ACCOUNT_MARGIN_SO_SO)
, "  ACCOUNT_MARGIN_LEVEL ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL)
, "  ACCOUNT_MARGIN ", AccountInfoDouble(ACCOUNT_MARGIN));
return(INIT_SUCCEEDED);
}//+------------------------------------------------------------------+
void OnDeinit(const int reason){
}//+------------------------------------------------------------------+
void OnTick(){


Print("  ACCOUNT_MARGIN ", AccountInfoDouble(ACCOUNT_MARGIN)
, "  ACCOUNT_MARGIN_LEVEL ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));

Comment("AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL) ", AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL)
, "  AccountInfoDouble(ACCOUNT_MARGIN_SO_SO) ", AccountInfoDouble(ACCOUNT_MARGIN_SO_SO)
, "  AccountInfoDouble(ACCOUNT_MARGIN_LEVEL) ", AccountInfoDouble(ACCOUNT_MARGIN_LEVEL)
, "  AccountInfoDouble(ACCOUNT_MARGIN) ", AccountInfoDouble(ACCOUNT_MARGIN)
, "  MarketInfo(Symbol(), MODE_MARGINREQUIRED) ", MarketInfo(Symbol(), MODE_MARGINREQUIRED) , "\n"
, "margin ", margin
, "  margin_free ", margin_free 
, "  uroven ", uroven );
}//+------------------------------------------------------------------+

double OrderPrice(){
   double count=0;
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol()  && OrderMagicNumber()==Magic )
            count=OrderOpenPrice();
      }   
   } 
   return(count);   
}
double OrderLot(){
   double count=0;
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol()  && OrderMagicNumber()==Magic )
            count=OrderLots();
      }   
   } 
   return(count);   
}


 
Aidez-moi, s'il vous plaît.

J'ai tout essayé et j'obtiens toujours l'erreur 130.
Dossiers :
Wai_v_5.0.mq4  59 kb
 
Bon après-midi à tous. J'essaie d'écrire mon propre conseiller du Graal;-). Mais pour une raison quelconque, il ne veut pas fonctionner. J'ai enregistré une vidéo, le lien vers la vidéo est dans mon message. Ce sera à la fois plus clair et plus rapide. La question elle-même est dans la vidéo. Merci d'avance. https://youtu.be/tqZrXjMONrE
ВОПРОС ПО НАПИСАНИЮ СОВЕТНИКА
ВОПРОС ПО НАПИСАНИЮ СОВЕТНИКА
  • 2020.12.09
  • www.youtube.com
ПИШУ СОВЕТНИК НА MQL4, А ГДЕ-ТО ДОПУСТИЛ ОШИБКУ- ПОМОИГИТЕ ПОЖАЛУЙСТА ПОНЯТЬ ГДЕ И В ЧЁМ ЭТА ОШИБКА ПОЛУЧИЛАСЬ?