FOREXにおけるシンボル名の最大長 - ページ 11

 
prostotrader:

うまくいかない。

同じEAを同じ(違う)シンボルで。

文字列にすべてのインスタンスを追加します(ピリオド文字も追加 できます)。

 
prostotrader:
もし、各オーダーのユニークなマジックを違う方法で(松葉づえなしで)入手する方法をご存知の方がいらっしゃいましたら、by

シェアしてください。

int magic = (int)TimeCurrent();
int magic = (int)TimeLocal();
オプションとして、頭打ちはない。
 
prostotrader:

時間、ありがとうございます、各EAに一意性を与え、ChartID()とEAへのパスをリンクする必要はありません。

ただし、端末のGlobal Variableに wizardを保存しておく必要があります。

時間は一意ではありません - すべてのEAを有効にしてターミナルを再起動します - すべてが同じ時間になります)

 
Konstantin Nikitin:
オプションとして、頭打ちはない。

もし、ユーザーが1秒間に2つ、3つのEAをキャストすることに成功したらどうでしょうか?

 
Taras Slobodyanik:

時間は一意ではありません - EAを有効にしてターミナルを再起動します - すべて同じ時間になります)

はい、その通りです

 
prostotrader:

もし、ユーザーが1秒間に2つ、3つのEAをキャストすることに成功したらどうでしょうか?

まあ、実際、これはありえないことなんですけどね。

Taras Slobodyanik:

時間は一意ではありません - エキスパートアドバイザーを有効にしてターミナルを再起動します - すべて同じ時間になります)

しかし、ここでもう一曲。EA を再起動する場合、Expert Advisor は、以前に開いたポジションを 維持するために、その魔術師と協力し続ける必要があります。だから、記憶することは問題ないでしょう。

 
Konstantin Nikitin:

まあ、実際にはあまりあり得ないことなんですけどね。

これは違う話です。再起動する場合、Expert Advisorは、以前に開いたポジションを 維持するために、そのマジックを継続する必要があります。だから、覚えていても損はない。

FOREX(変更なしのFORTS)は、このバリアントで止めました。

もし、もっと良いものを思いついた方がいらっしゃいましたら、ぜひお願いします。

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.01
//#define FORTS
//---
#include ".\..\include\crc64.mqh"
//---
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 Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic(const string a_symbol)
{
//--- Get ChartID
  symb_magic.ch_id = ChartID();
  if(SymbolSelect(Symbol(), true) == false)
  {
    Print(__FUNCTION__, ": Нет такого символа!");
    return(0);
  }
  if(symb_magic.ch_id != 0)
  {
#ifdef  FORTS
  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;
      return(symb_magic.magic);
    }
  }
#else
  uchar Bytes[];
  ulong result = crc64(0, Bytes, StringToCharArray(string(symb_magic.ch_id), Bytes, 0));
  if(result > 0)
  {
    symb_magic.magic = result<<12;
    if(ulong(GlobalVariableSet(Symbol() + ":" + DoubleToString(double(symb_magic.magic), 0), double(symb_magic.magic))) > 0)
    {
      Print("Terminal Global variable created.");
    }
    return(symb_magic.magic);
  }
#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;
    ulong in_magic = m_magic;
#ifdef  FORTS  
    stored_magic>>=16;
    in_magic>>=16;
    if(in_magic == stored_magic) return(true);
#else
   stored_magic>>=12;
  in_magic>>=12;
  if(m_magic == symb_magic.magic) return(true);
#endif     
  }
  return(false);
}
//-------------------------------------------------------------------+
// Get stired magic function                                         |
//+------------------------------------------------------------------+
ulong GetStoredMagic(const long cha_id)
{
  if(cha_id == symb_magic.ch_id)
  {
    return(symb_magic.magic);
  }
  return(0);  
}
//+------------------------------------------------------------------+

エキスパートアドバイザーは

//+------------------------------------------------------------------+
//|                                                   Magic_test.mq5 |
//|                                      Copyright 2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
#include   "AutoMagic.mqh"

ulong a_magic;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

  a_magic = GetMagic(Symbol());
  if(a_magic != 0)
  {
    if(IsMyMagic(a_magic, ChartID()) == true)
    {
      Print("Magic = ", a_magic);
    }
  }
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
    string a_name = Symbol() + ":" + DoubleToString(double(a_magic), 0);
    if(GlobalVariableCheck(a_name) == true)
    {
      GlobalVariableDel(a_name);
      Print("Terminal Global variable deleted.");
    }
  }
 
ChartID()

も再起動時に変更され、EAが同じラベルで動作し続けることはできません(保存しない限り)。

パラメータ(入力)およびシンボルにおいて、EAの各コピーが一意であること。
この場合、ラベルを保存する必要はなく、同じExpert Advisor-parametersに同じものが適用されます。

 
prostotrader:

FOREXではこのバージョンに落ち着きました(FORTSは変更なし)。

もし誰かがもっといいものを思いついたら、歓迎しますよ。

各ポジションに個性的なマジシャンが出題されました。今、ふと思ったんです。最後のチケットを取って、マジコンにセットする方が簡単です。コピー機でも同様に応用しました。サーバー部からポジションのチケットを取り出し、クライアントでマジシャンが開いたポジションに 割り当てました。また、余分な努力なしに動作します。

 
Konstantin Nikitin:

質問は、各ポジションの個性的なマジシャンに行った。今、私はこう思っています。最後のチケットを取ってマジコンにするのが簡単です。コピー機で似たようなのを使ってました。サーバーからポジションのチケットを取り出し、クライアントでマジシャンが開いたポジション に割り当てました。また、余計な手間をかけずに動作します。

注文ごとに自分のマスターを用意しなければならないのです。

おっしゃるとおり、リロードするとChartIDが変わるので、ターミナルのGlobal Variablesに何も保存する必要はありません。

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.01
//#define FORTS
//---
#include ".\..\include\crc64.mqh"
//---
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 Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic(const string a_symbol)
{
//--- Get ChartID
  symb_magic.ch_id = ChartID();
  if(SymbolSelect(Symbol(), true) == false)
  {
    Print(__FUNCTION__, ": Нет такого символа!");
    return(0);
  }
  if(symb_magic.ch_id != 0)
  {
#ifdef  FORTS
  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;
      return(symb_magic.magic);
    }
  }
#else
  uchar Bytes[];
  ulong result = crc64(0, Bytes, StringToCharArray(string(symb_magic.ch_id), Bytes, 0));
  if(result > 0)
  {
    symb_magic.magic = result<<12;
    return(symb_magic.magic);
  }
#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;
    ulong in_magic = m_magic;
#ifdef  FORTS  
    stored_magic>>=16;
    in_magic>>=16;
    if(in_magic == stored_magic) return(true);
#else
   stored_magic>>=12;
  in_magic>>=12;
  if(m_magic == symb_magic.magic) return(true);
#endif     
  }
  return(false);
}
//-------------------------------------------------------------------+
// Get stщred magic function                                         |
//+------------------------------------------------------------------+
ulong GetStoredMagic(const long cha_id)
{
  if(cha_id == symb_magic.ch_id)
  {
    return(symb_magic.magic);
  }
  return(0);  
}
//+------------------------------------------------------------------+
#property copyright "Copyright 2018 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
#include   "AutoMagic.mqh"

ulong a_magic;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

  a_magic = GetMagic(Symbol());
  if(a_magic != 0)
  {
    if(IsMyMagic(a_magic, ChartID()) == true)
    {
      Print("Magic = ", a_magic);
    }
  }
   
//---
   return(INIT_SUCCEEDED);
  }