初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1195

 
我用的是安卓机。
 
baxromsaid:
我不知道如何开立一个模拟账户


baxroms说
我用的是安卓系统。


MetaQuotes不是一个经纪人 - 因此你只能在MetaQuotes-Demo服务器上开立一个模拟账户。

必须在经纪商处开立真实的交易账户。

 

鉴赏家们好!


你能告诉我为什么我的代码没有设置vol和问吗?零值总是在打印中显示。展开是 "夹紧 "正常,它显示正确的值。

我把EA附在LTCUSD图表上。

错误是什么?

#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:

鉴赏家们好!


你能告诉我为什么在我的代码中vol和ask变量没有得到数值?零值总是在打印中显示。展开是 "夹紧 "正常,它显示正确的值。

我把EA附在LTCUSD图表上。

错误是什么?

你应该在获得它之前应用CSymbolInfo::Refresh 或CSymbolInfo::RefreshRates 方法--取决于你的需要。

下面是这些函数的代码。

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

你必须应用CSymbolInfo::Refresh 或CSymbolInfo::RefreshRates 方法,然后才能得到--取决于你的需要

非常感谢你,亲爱的弗拉基米尔!

也许你还可以告诉我如何用CSymbolInfo Name 方法获得符号名称?当我试图这样做的时候

#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); 

我在name变量中得到一个布尔值true。

 
odyn:

非常感谢你,亲爱的弗拉基米尔!

也许你还可以建议:如何使用CSymbolInfo Name 方法获得一个符号名称?当我尝试这样做的时候

我在name变量中得到一个布尔值true。

我是这样做的--我初始化CSymbolInfo类的变量

//+------------------------------------------------------------------+
//| 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);
  }


如果你想获得一个名称(例如在比较位置符号和当前符号时),你需要使用CSymbolInfo::Name() 方法。

使用实例

//+------------------------------------------------------------------+
//| 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);
  }


帮助显示了调用Name方法的两种形式

命名

获取金融工具的名称。

string  Name() const

返回的值

金融工具的名称。


命名

设置金融工具的名称,以便对其进行进一步处理。

bool  Name(string name)

返回的值

没有。

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


如果你想获得一个名称(例如,在将一个位置符号与当前符号进行比较时),你需要使用CSymbolInfo::Name() 方法。

使用实例


帮助显示了调用Name方法的两种形式

命名

获取金融工具的名称。

返回的值

金融工具的名称。

我有一个关于这种形式的方法名称的问题。

如何在变量中获得仪器的名称? 因为这样做。

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

如何使用CSymbolInfo::Name()方法获得一个包含乐器名称的字符串

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

我对姓名法的这种特殊形式有一个疑问。

如何将工具的名称输入变量? 因为这样做。

name得到一个布尔值true,如何使用CSymbolInfo::Name()方法得到一个包含工具名称的字符串

首先,我们 对它进行初始化然后我们使用方法Name()。

我们在''字符上运行代码。

//+------------------------------------------------------------------+
//|                                                            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);
//---
  }
//+------------------------------------------------------------------+

结果。

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

首先是INITIALIZE然后我们使用Name()方法

在''字符上运行代码。

结果。

明白了。谢谢你的耐心))。


PS:我的编译器在你的代码中责备返回。当我移除它时,一切都很好。

 
odyn:

明白了。谢谢你的耐心))。


PS:我的编译器在你的代码中责备返回。当我把它取出来时,它就好了。

这是一个脚本(我举了一个脚本的例子),不是一个EA。如果你把我的代码复制到EA中,会有一个错误。