Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1195

 
Ich habe einen Androiden.
 
baxromsaid:
Ich weiß nicht, wie man ein Demokonto eröffnet.


baxromsaid:
Ich benutze Androide.


MetaQuotes ist kein Broker - daher können Sie ein Demokonto nur auf den MetaQuotes-Demo-Servern eröffnen.

Ein echtes Handelskonto muss bei einem Broker eröffnet werden.

 

Hallo Genießer!


Können Sie mir bitte sagen, warum in meinem Code die Variablen vol und ask keine Werte erhalten? In Print wird immer der Wert Null angezeigt. Die Spreizung ist normal, sie zeigt den richtigen Wert an.

Ich hänge den EA an den LTCUSD-Chart an.

Worin besteht der Fehler?

#include <Trade\SymbolInfo.mqh>
CSymbolInfo m_symbol;
int a=0,b=0,c=0,spread=0,i=0,j=0;
double x=0,y=0,z=0,m=0,ask=0;
input int vyb=7;
bool bool_1=true,bool_2=true,bool_3=true;
string str_1="",str_2="",str_3="",name="",Text[101];
ulong vol=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  name=_Symbol;
  Print("текущий символ: ",name); 
  spread=m_symbol.Spread();
  Print("спред по символу: ",spread);
  vol=m_symbol.Volume();
  Print("обьєм по символу ",name," - ",vol);
  ask=m_symbol.Ask();
  Print("Цена Аск равно ",ask);
 
odyn:

Hallo Genießer!


Können Sie mir bitte sagen, warum mein Code nicht vol setzt und fragen? In Print wird immer der Wert Null angezeigt. Die Spreizung ist normal, sie zeigt den richtigen Wert an.

Ich hänge EA an den LTCUSD-Chart an.

Worin besteht der Fehler?

Sie sollten entweder die Methode CSymbolInfo::Refresh oder CSymbolInfo::RefreshRates anwenden, bevor Sie sie erhalten - je nachdem, was Sie benötigen.

Hier ist der Code für diese Funktionen:

//+------------------------------------------------------------------+
//| Refresh cached data                                              |
//+------------------------------------------------------------------+
bool CSymbolInfo::Refresh(void)
  {
   long tmp=0;
//---
   if(!SymbolInfoDouble(m_name,SYMBOL_POINT,m_point))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_CONTRACT_SIZE,m_contract_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_MIN,m_lots_min))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_MAX,m_lots_max))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_STEP,m_lots_step))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_VOLUME_LIMIT,m_lots_limit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_SWAP_LONG,m_swap_long))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_SWAP_SHORT,m_swap_short))
      return(false);
   if(!SymbolInfoInteger(m_name,SYMBOL_DIGITS,tmp))
      return(false);
   m_digits=(int)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_ORDER_MODE,tmp))
      return(false);
   m_order_mode=(int)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_TRADE_EXEMODE,tmp))
      return(false);
   m_trade_execution=(ENUM_SYMBOL_TRADE_EXECUTION)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_TRADE_CALC_MODE,tmp))
      return(false);
   m_trade_calcmode=(ENUM_SYMBOL_CALC_MODE)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_TRADE_MODE,tmp))
      return(false);
   m_trade_mode=(ENUM_SYMBOL_TRADE_MODE)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_SWAP_MODE,tmp))
      return(false);
   m_swap_mode=(ENUM_SYMBOL_SWAP_MODE)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_SWAP_ROLLOVER3DAYS,tmp))
      return(false);
   m_swap3=(ENUM_DAY_OF_WEEK)tmp;
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_INITIAL,m_margin_initial))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_MAINTENANCE,m_margin_maintenance))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_LONG,m_margin_long))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_SHORT,m_margin_short))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_LIMIT,m_margin_limit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_STOP,m_margin_stop))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_STOPLIMIT,m_margin_stoplimit))
      return(false);
   if(!SymbolInfoInteger(m_name,SYMBOL_EXPIRATION_MODE,tmp))
      return(false);
   m_trade_time_flags=(int)tmp;
   if(!SymbolInfoInteger(m_name,SYMBOL_FILLING_MODE,tmp))
      return(false);
   m_trade_fill_flags=(int)tmp;
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Refresh cached data                                              |
//+------------------------------------------------------------------+
bool CSymbolInfo::RefreshRates(void)
  {
   return(SymbolInfoTick(m_name,m_tick));
  }
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Refresh
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Refresh
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Refresh - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Sie müssen entweder die Methode CSymbolInfo::Refresh oder CSymbolInfo::RefreshRates anwenden, bevor Sie - je nachdem, was Sie benötigen

Vielen Dank, lieber Wladimir!

Vielleicht können Sie mir auch sagen, wie man den Symbolnamen mit der MethodeCSymbolInfo Name erhält? Wenn ich das tue

#include <Trade\SymbolInfo.mqh>
CSymbolInfo m_symbol;
int a=0,b=0,c=0,spread=0,i=0,j=0;
double x=0,y=0,z=0,m=0,ask=0;
input int vyb=7;
bool bool_1=true,bool_2=true,bool_3=true;
string str_1="",str_2="",str_3="",name="",Text[101];
ulong vol=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  name=m_symbol.Name(Symbol())
  Print("текущий символ: ",name); 

Ich erhalte einen booleschen Wert true in der Variablen name.

 
odyn:

Vielen Dank, lieber Wladimir!

Vielleicht können Sie auch vorschlagen: wie man einen Symbolnamen mitCSymbolInfo Name-Methode erhalten? Wenn ich es auf diese Weise versuche

Ich erhalte einen booleschen Wert true in der Variablen name.

Ich tue das - ich initialisiere eine Variable der CSymbolInfo-Klasse.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
***
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
   RefreshRates();
***
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
     {
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
      return(false);
     }
//---
   return(true);
  }


Wenn Sie einen Namen erhalten möchten (z. B. beim Vergleich von Positionssymbol und aktuellem Symbol), müssen Sie die Methode CSymbolInfo::Name() verwenden.

Beispiel für die Verwendung:

//+------------------------------------------------------------------+
//| Is position exists                                               |
//+------------------------------------------------------------------+
bool IsPositionExists(void)
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
            return(true);
//---
   return(false);
  }


Die Hilfe zeigt zwei Formen des Aufrufs der Methode Name

Name

Ruft den Namen des Finanzinstruments ab.

string  Name() const

Zurückgegebener Wert

Bezeichnung des Finanzinstruments.


Name

Legt den Namen des Finanzinstruments für die weitere Arbeit mit ihm fest.

bool  Name(string name)

Zurückgegebener Wert

Nein.

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Name - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:


Wenn Sie einen Namen erhalten möchten (z. B. beim Vergleich eines Positionssymbols mit dem aktuellen Symbol), müssen Sie die Methode CSymbolInfo::Name() verwenden.

Beispiel für die Verwendung:


Die Hilfe zeigt zwei Formen des Aufrufs der Methode Name

Name

Ruft den Namen des Finanzinstruments ab.

Zurückgegebener Wert

Bezeichnung des Finanzinstruments.

Ich habe eine Frage zu dieser Form der Methode Name.

WIE bekomme ich den NAMEN des Instruments in die Variable? Denn so geht es:

#include <Trade\SymbolInfo.mqh>
CSymbolInfo m_symbol;
string str_1="",str_2="",str_3="",name="";
name=m_symbol.Name();
Print("текущий символ: ",name);

Wie erhalte ich mit derMethode CSymbolInfo::Name()einen String mit dem Namen des Instruments?

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo / Name
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo / Name - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
odyn:

Ich habe eine Frage zu dieser besonderen Form der Methode Name.

WIE bekomme ich den NAMEN des Werkzeugs in eine Variable, weil ich dies tue:

Wie erhalte ich mit derMethode CSymbolInfo::Name()einen String mit dem Werkzeugnamen?

Zuerst INITIALISIEREN wir sie. Dann verwenden wir die Methode Name().

Wir führen den Code mit dem Zeichen '' aus.

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property version   "1.00"
#include <Trade\SymbolInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
   string name=m_symbol.Name();
   Print("текущий символ: ",name);
//---
  }
//+------------------------------------------------------------------+

Ergebnis:

1 (EURUSD,H1)   текущий символ: EURUSD
 
Vladimir Karputov:

Zuerst wird INITIALIZE durchgeführt. Dann verwenden wir die Methode Name().

Führen Sie den Code mit dem Zeichen '' aus.

Ergebnis:

Ich hab's. Danke für Ihre Geduld )).


PS: Mein Compiler tadelt return in Ihrem Code. Als ich ihn entfernt habe, war alles in Ordnung.

 
odyn:

Ich hab's. Danke für Ihre Geduld )).


PS: Mein Compiler tadelt return in Ihrem Code. Als ich sie entfernt habe, war alles in Ordnung.

Es handelt sich um ein Skript (ich habe ein Beispiel für ein Skript gegeben), nicht um einen EA. Wenn Sie meinen Code in EA kopieren, wird ein Fehler auftreten.