外汇交易中符号名称的最大长度 - 页 2

 

其实我想为FORES做一些好事,但我想这是不可能的。

很久以前,我为Magic写了一个插件文件,现在我把它调整了一下

我也决定为外汇做这件事,但这是不可能的。

如果有人给它增加GetForexName 函数,它也会对FOREX起作用

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.01
#define  FORTS
//---
struct SYMBOL_MAGIC
{
  long ch_id;
  ulong magic;
};
SYMBOL_MAGIC symb_magic;
//-------------------------------------------------------------------+
// Split string function                                             |
//+------------------------------------------------------------------+
string SplitString(const string a_str,ulong &a_month,ulong &a_year)
  {
   int str_size=StringLen(a_str);
   int str_tire=StringFind(a_str, "-");
   int str_tochka=StringFind(a_str, ".", str_tire);
   if((str_tire>0) && (str_tochka>0) &&(str_size > 0))
     {
      a_month= ulong(StringToInteger(StringSubstr(a_str,str_tire+1,str_tochka-str_tire-1)));
      a_year = ulong(StringToInteger(StringSubstr(a_str,str_tochka+1,str_size-str_tochka-1)));
      if((a_month > 0) && (a_year > 0)) return(StringSubstr(a_str, 0, str_tire));
     }
   return("");
  }
//-------------------------------------------------------------------+
// Get FOREX symbol function                                       |
//+------------------------------------------------------------------+
string GetForexName(const string a_str)
{
  //??????? Из любого названия пары функция долна возвращать ТОЛЬКО саму пару (н-р UERUSD)
  return("");
}  
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic(const string a_symbol)
{
//--- Get ChartID
  symb_magic.ch_id = ChartID();
//---
  if(SymbolSelect(Symbol(), true) == false)
  {
    Print(__FUNCTION__, ": Нет такого символа!");
    return(0);
  }  
#ifdef  FORTS
//--- Test symdol
  if(StringLen(a_symbol)>10)
  {
    Print(__FUNCTION__, ": Не правильный символ!");
    return(0);
  }
  if(symb_magic.ch_id != 0)
  {
    ulong month = 0;
    ulong year = 0;
    string new_str=SplitString(a_symbol,month,year);
    if(StringLen(new_str)>0)
    {
      symb_magic.magic = 0;
      uchar char_array[];
      int result=StringToCharArray(new_str,char_array,0,WHOLE_ARRAY,CP_ACP);
      if(result>0)
      {
        ulong value;
        for(int i = 0; i < result - 1; i++)
        {
          value=ulong(char_array[i]);
          value<<=(56 -(i*8));
          symb_magic.magic += value;
        }
        month<<=24;
        symb_magic.magic += month;
        year<<=16;
        symb_magic.magic += year;
        ulong a_chid = ulong(symb_magic.ch_id);
        a_chid<<=16;
        return(symb_magic.magic&=symb_magic.ch_id);
      }
    }
  }
#else
  string in_str = GetForexName(a_symbol);
  if(in_str != "")
  { 
    symb_magic.magic = 0;
    uchar char_array[];
    int result=StringToCharArray(a_symbol,char_array,0,WHOLE_ARRAY,CP_ACP);
    if(result>0)
    {
      ulong value;
      for(int i = 0; i < 6; i++)
      {
        value=ulong(char_array[i]);
        value<<=(56 -(i*8));
        symb_magic.magic += value;
      }  
      ulong a_chid = ulong(symb_magic.ch_id);
      a_chid<<=16;
      return(symb_magic.magic&=symb_magic.ch_id);
    }
  }
#endif    
  return(0); 
}
//-------------------------------------------------------------------+
// Is my magic function                                              |
//+------------------------------------------------------------------+
bool IsMyMagic(const ulong m_magic, const long chart_id)
{
  if(symb_magic.ch_id == chart_id)
  {
    ulong stored_magic=symb_magic.magic;
    stored_magic>>=16;
    ulong in_magic = m_magic;
    in_magic>>=16;
    if(in_magic == stored_magic) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+

最后2个字节是用来在一个EA中使用大量的向导。

chart_id - 用于识别图表(你可以根据需要打开多个相同的符号)。

在对 "魔术 "进行任何工作之前,调用函数IsMyMagic,它将检查魔术师是否属于给定的EA。

 
prostotrader:

只是不清楚如何分析一个符号,如果它前面可以有任何东西的话 :(

创建一个使用的货币数组,例如 "EUR""USD""JPY"。
然后用这个函数来配对所有可能的组合,例如 "EURUSD""EURJPY""USDEUR""USDJPY""JPYEUR""JPYUSD"。
而每次你都要检查在你所分析的符号名称中是否有这种组合的出现。如果有发生--就会发现六个字母的名字。

 
Andrei Fandeev:

创建一个使用的货币数组,例如 "EUR""USD""JPY"。
然后用这个函数来配对所有可能的组合,例如 "EURUSD""EURJPY""USDEUR""USDJPY""JPYEUR""JPYUSD"。
而每次你都要检查在你所分析的符号名称中是否有这种组合的出现。如果有发生--就会发现六个字母的名字。

帮大家一个忙,添加GetForexName 函数

 
prostotrader:

谢谢,但我只需要得到这一对的 "裸 "名称(6个字符)。

也许有人有现成的解决方案?

添加

只是不清楚如何分析一个符号,如果它可以在对本身的前面有任何东西 :(

复制者通常使用2个参数前缀和后缀(EURUSD之前或之后的附加符号)

 
prostotrader:

谢谢,但我只需要得到这一对的 "裸 "名称(6个字符)。

也许有人有现成的解决方案?

添加

只是不清楚如何分析一个符号,如果它可以在对本身的前面有任何东西 :(

弦乐查找

 

这取决于经纪人,我记得有一个情况让我陷入了迷茫--客户有一个错误,这真的把我吓坏了,我想我必须写出粗糙的符号识别套件。

2016.10.16 13:08:51.633 2016.08.25 04:39 ExpertEURUSD(€),M15: OrderSend error 4106

2016.10.16 13:08:51.633 2016.08.25 04:40 ExpertEURUSD(€),M15: OrderSend函数 的未知符号名称EURUSD(ˆ)

 
prostotrader:

在外汇中,有的符号大多有后缀,有前缀的很少,但总是基数(对)用大写字母写,所有的前缀用小写字母写,所以你可以在此基础上发展。

 
Vitaly Muzichenko:

在外汇中,有后缀的符号居多,前缀很少,但总是基数(对)用大写字母写,所有前缀用小写字母,所以这是一个好的起点。

更可靠的是,特别是当它是一个输入参数时,把所有的东西减少到单例的 StringToLower StringToUpper 并搜索 StringFind那么在哪里或添加什么就不重要了。

 

如果只使用货币对的话。

对于SymbolInfoString()

enum_symbol_info_string

识别器

描述

财产类型

SYMBOL_BASIS

衍生品的基础资产名称

绳子

符号_货币_基数

票据的基础货币

绳子

符号_货币_利润

盈利货币

绳子

符号_货币_边际

计算保证金的货币

绳子

SYMBOL_BANK

目前的报价来源

绳子

符号_描述

符号的字符串描述

绳子

SYMBOL_FORMULA

构建自定义符号价格的公式

绳子

SYMBOL_ISIN

国际证券识别码(ISIN)系统中的一个交易符号的名称。国际证券识别码是一个12位的字母数字代码,可以唯一地识别证券。这一特性的存在是在交易服务器端定义的。

绳子

符号_页面

含有该符号信息的网页地址。在终端查看符号属性时,该地址将显示为一个链接。

绳子

SYMBOL_PATH

符号树中的路径

绳子

 
Konstantin Nikitin:

更可靠的是,特别是如果它是一个输入参数,把所有的东西减少到一种情况下的 StringToLower StringToUpper 并搜索 StringFind那么在哪里或添加什么就不重要了。

但我不明白这个问题,为什么一个字符无论长短都不能被替换?