Questions d'un "mannequin - page 243

 
paladin800:
Faites ArrayResize(Buf, rates_total) ;

Faites aussi cela, au moins il n'y aura pas d'erreur.

int start=10;

Et il tracera une ligne droite=0,014 sur l'Euro M1.

 

Bon après-midi.

Il y a un code qui, pour une raison quelconque, ne fonctionne pas.

Le prix dans la méthode m_symbol.Ask() renvoie 0.

Jugez le code sévèrement. Je suis en train d'apprendre. Prêt à écouter toute critique adéquate.

Tant que l'objectif était le fait d'ouvrir un poste. Qté pas encore intéressante (facile à mettre en œuvre).

//+------------------------------------------------------------------+
//|                                                        probe.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      ""
#property version   "1.00"
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
input int    perMA1=3;
input int    perMA2=7;
input double DifMANeed=0;
input double InpLots=0.1;
double DifMAN=0;

CTrade m_trade;
CSymbolInfo m_symbol;

class MATest{
private:
   int MA1;    //First MA
   int MA2;    //Two MA
   
public:
   double DifMA;  //Diference of MA
   bool TradeAllowed();     
};
bool MATest::TradeAllowed(){
   MA1=iMA(NULL,0,perMA1,0,MODE_SMA,PRICE_CLOSE);
   MA2=iMA(NULL,0,perMA2,0,MODE_SMA,PRICE_CLOSE);
   double price=m_symbol.Ask();
   m_trade.SetDeviationInPoints(5);
   DifMA=MathAbs(MA1-MA2);
   Print(price);
   if(DifMA>DifMAN){
      if(MA1>MA2){
        if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,m_symbol.Ask(),0,0)){
            Print("Open Sell");
        }
        else Print("Cant not open Sell");
      }
      if(MA1<MA2){
        if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,m_symbol.Bid(),0,0)){
            Print("Open Buy");
        }
        else Print("Cant not open Buy",m_symbol.Name(),m_symbol.Bid());
      
      }
      return(true);
   }
   else return(false);
};

MATest g_trade;

int OnInit()
  {
//---
   string symb=Symbol();
   m_symbol.Name(symb);
   
   Alert(m_symbol.Name()," ",NormalizeDouble(m_symbol.Bid(),m_symbol.Digits()));
   double close_array[];
      CopyClose(NULL,0,1,200,close_array);
   double high_array[];
      CopyHigh(NULL,0,1,200,high_array);
   double low_array[];
      CopyLow(NULL,0,1,200,low_array);
   double volant;
   for(int i=ArraySize(close_array);i<0;i--){
         volant+=(close_array[i]+high_array[i]+low_array[i])/3;
         volant=volant/ArraySize(close_array);
      }
   if(DifMANeed==0||DifMANeed>volant){
      DifMAN=volant;
   }
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(g_trade.TradeAllowed())Comment(g_trade.DifMA,"  Trade Allowed");
   else Comment(g_trade.DifMA," Trade Not Allowed");
  }
//+------------------------------------------------------------------+
 
panker:

Bon après-midi.

Il y a un code qui, pour une raison quelconque, ne fonctionne pas.

Le prix dans la méthode m_symbol.Ask() renvoie 0.

Jugez le code sévèrement. Je suis en train d'apprendre. Prêt à écouter toute critique adéquate.

Alors que pour le but était le fait d'ouverture d'un poste. Qté pas encore intéressante (facile à mettre en œuvre).

Peut-être qu'il vous manque une fonction, quelque chose comme SymbolSelect.

Dans ce cas, il s'agit d'une commande Nom

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfoask - voir note

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Ask
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Ask
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Ask - Документация по MQL5
 
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / RefreshRates
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / RefreshRates
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / RefreshRates - Документация по MQL5
 
panker: Il y a un code qui ne fonctionne pas pour une raison quelconque. Le prix dans la méthode m_symbol.Ask() renvoie 0.
Regardez l'implémentation de la bibliothèque elle-même. La méthode Ask() renvoie stupidement la valeur m_tick.ask. La méthode RefreshRates() est utilisée pour rafraîchir les valeurs de m_tick).
 

Quelqu'un peut-il donner un exemple de code ?

Comment créer une "Decimal ScrollBar" ?

J'ai utilisé la classe CScroll de MQL5.https://www.mql5.com/en/docs/standardlibrary/controls/cscroll

Documentation on MQL5: Standard Library / Classes for Control Panels and Dialogs / CScroll
Documentation on MQL5: Standard Library / Classes for Control Panels and Dialogs / CScroll
  • www.mql5.com
Standard Library / Classes for Control Panels and Dialogs / CScroll - Documentation on MQL5
 
Si je me souviens bien, la fonction OnDeinit() a 2,5 secondes pour s'exécuter. Question 1 : si toutes les poignées de l'indicateur ne sont pas libres pendant cette période, que se passe-t-il ? Question 2 : Y a-t-il une limite de temps pour OnInit() ?
 
paladin800:

Si je me souviens bien, la fonction OnDeinit() a besoin de 2,5 secondes pour s'exécuter.

Question 1 : si toutes les poignées indicatrices ne sont pas libérées pendant cette période, que se passe-t-il ?

Les poignées des indicateurs constituent un sujet distinct dans MT5, car leur libération n'est pas tant contrôlée par le conseiller expert lui-même (il peut seulement envoyer un message indiquant qu'il n'en a pas besoin et réinitialiser la valeur de la poignée), que par le terminal lui-même (qui prend la décision finale de supprimer complètement la poignée de l'indicateur).


Question 2 : y a-t-il une limite de temps pour OnInit() ?

pas de
 

Pouvez-vous me dire ce que devrait être le "corridor de profit" par an ? (в %%)

Dossiers :
12.png  45 kb
 
J'écris un Expert Advisor multi-devises où dans les paramètres d'entrée je définis le nom de l'instrument, comme la chaîne Symbol0="EURUSD". Si j'écris le mauvais nom, l'échange ne se fait pas. Question : Existe-t-il une fonction qui permettrait de comparer les noms des instruments avec les instruments proposés par le courtier ?
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5