Fragen von einem "Dummy" - Seite 243

 
paladin800:
Do ArrayResize(Buf, rates_total);

Tun Sie das auch, dann gibt es wenigstens keinen Fehler.

int start=10;

Und es wird eine gerade Linie=0,014 auf Euro M1 zeichnen.

 

Guten Tag.

Es gibt einen Code, der aus irgendeinem Grund nicht funktioniert.

Der Preis in der Methode m_symbol.Ask() gibt 0 zurück.

Beurteilen Sie den Kodex streng. Ich lerne gerade. Sie haben ein offenes Ohr für jede angemessene Kritik.

Dabei ging es um die Eröffnung einer Stelle. Qty noch nicht interessant (leicht zu implementieren).

//+------------------------------------------------------------------+
//|                                                        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:

Guten Tag.

Es gibt einen Code, der aus irgendeinem Grund nicht funktioniert.

Der Preis in der Methode m_symbol.Ask() gibt 0 zurück.

Beurteilen Sie den Kodex streng. Ich lerne gerade. Sie haben ein offenes Ohr für jede angemessene Kritik.

Solange das Ziel die Eröffnung einer Stelle war. Qty noch nicht interessant (leicht zu implementieren).

Vielleicht fehlt Ihnen eine Funktion wie SymbolSelect.

In diesem Fall handelt es sich um einen Befehl Name

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinfoask - siehe Hinweis

Документация по 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: Es gibt einen Code, der aus irgendeinem Grund nicht funktioniert. Der Preis in der Methode m_symbol.Ask() gibt 0 zurück.
Sehen Sie sich die Implementierung der Bibliothek selbst an. Die Methode Ask() gibt dummerweise den Wert von m_tick.ask zurück. Die Methode RefreshRates() wird zur Aktualisierung der m_tick-Werte verwendet).
 

Kann jemand bitte ein Code-Beispiel geben.

Wie erstellt man eine "dezimale ScrollBar"?

Ich habe die MQL5-Klasse CScroll verwendet.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
 
Wenn ich mich richtig erinnere, hat die Funktion OnDeinit() 2,5 Sekunden Zeit zur Ausführung. Frage 1: Was passiert, wenn in dieser Zeit nicht alle Indikatorgriffe frei sind? Frage 2: Gibt es ein Zeitlimit für OnInit()?
 
paladin800:

Wenn ich mich richtig erinnere, benötigt die Funktion OnDeinit() 2,5 Sekunden zur Ausführung.

Frage 1: Was passiert, wenn in dieser Zeit nicht alle Indikatorgriffe freigegeben werden?

Indikator-Handles sind in MT5 ein separates Thema, da ihre Freigabe nicht so sehr vom Expert Advisor selbst gesteuert wird (er kann nur eine Nachricht senden, dass er sie nicht benötigt und den Handle-Wert zurücksetzen), sondern vom Terminal selbst (das die endgültige Entscheidung trifft, den gesamten Indikator-Handle zu entfernen).


Frage 2: Gibt es ein Zeitlimit für OnInit()?

keine
 

Können Sie mir sagen, wie hoch der "Gewinnkorridor" pro Jahr sein sollte? (в %%)

Dateien:
12.png  45 kb
 
Ich schreibe einen Expert Advisor für mehrere Währungen, bei dem ich in den Eingabeparametern den Instrumentennamen festlege, z. B. String Symbol0="EURUSD". Wenn ich den falschen Namen schreibe, geht der Handel nicht. Frage: Gibt es eine solche Funktion, die Instrumentennamen mit den vom Broker angebotenen Instrumenten vergleicht?
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5