FOREXにおけるシンボル名の最大長 - ページ 5 123456789101112 新しいコメント fxsaber 2018.08.25 12:24 #41 prostotrader:ポジションがあれば、チャートが閉じたときにすべてのデータを取得 することができ、このシンボルに対する保留中の注文を単に「釘付け」にすることができます。 何のために手に入れるのか?あなたの変形例の重大な欠点は、チャートハンドルとの結合です。 誰もより良いものを考えていない(1つの同じシンボルで複数のEAを開くために)。ハンドルから取り外すことも可能ですが、その場合は何かに接続する必要があります。例えば、EAの入力パラメータに+パス。しかし、この解決策にはデメリットもあります。 fxsaber 2018.08.25 12:25 #42 prostotrader:Roboforex AUDNZDの動作についてPrint(GetForexName("AUDNZD")); prostotrader 2018.08.25 12:26 #43 fxsaber:では、そのポジションや注文があるタイミングでチャートを閉じる ことで、EAが切り離された場合はどうでしょうか。 なぜ、このようなことがFXでうまくいかなかったのか、理由はよくわかりません。 何を優先して配置するかが明確でないため EURUSDの場合はEUR、AUDNZDの場合はNZDが ベースとなります。 prostotrader 2018.08.25 12:29 #44 //+------------------------------------------------------------------+ //| 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) { string s_base = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE); string a_prof = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT); if(StringLen(s_base) == 3) { int base_pos = StringFind(a_str, s_base, 0); if(base_pos > -1) { switch(base_pos) { case 0: case 1: case 2: return(StringSubstr(a_str, base_pos, 6)); break; default: { string left_str = StringSubstr(a_str, base_pos - 3, 3); string right_str = StringSubstr(a_str, base_pos + 3, 3); if(right_str == "") { return(StringSubstr(a_str, base_pos - 3, 6)); } else if(StringLen(right_str) < 3) { return(StringSubstr(a_str, base_pos - 3, 6)); } else { bool is_match = true; uchar uch_array[]; int result = StringToCharArray(right_str, uch_array, 0, WHOLE_ARRAY, CP_ACP); if(result == 4) { for(int i=0; i < result - 1; i++) { if((uch_array[i] < 65) || (uch_array[i] > 90)) { is_match = false; break; } } if(is_match == true) { return(StringSubstr(a_str, base_pos, 6)); } else { is_match = true; result = StringToCharArray(left_str, uch_array, 0, WHOLE_ARRAY, CP_ACP); if(result == 4) { for(int i=0; i < result - 1; i++) { if((uch_array[i] < 65) || (uch_array[i] > 90)) { is_match = false; break; } } if(is_match == true) { return(StringSubstr(a_str, base_pos - 3, 6)); } } } } } } break; } } } 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 != "") { Print("in_str = ", 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); } //+------------------------------------------------------------------+ 2018.08.25 15:29:02.174 Magic_test (AUDNZD,M1) in_str = AUDNZD 2018.08.25 15:29:02.384 Magic_test (AUDNZD,M1) FOREX done. int OnInit() { ulong a_magic = GetMagic(Symbol()); if(a_magic != 0) { a_magic+=25; if(IsMyMagic(a_magic, ChartID()) == true) { Print("FOREX done."); } } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } prostotrader 2018.08.25 12:37 #45 TERMINALグローバル変数 にマジックを格納すれば、何も失われることはありません。 今、書きます。 Vitaly Muzichenko 2018.08.25 12:46 #46 prostotrader:TERMINALグローバル変数 にマジックを格納すれば、何も失われることはありません。 書いておこう。クラッシュすると、殺される。 fxsaber 2018.08.25 12:47 #47 prostotrader:何を優先して配置するかが明確でないため EURUSDの場合はEUR、AUDNZDの場合はNZDが ベースとなります。常に トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム FOREXにおけるシンボル名の最大長 fxsaber さん 2018.08.25 14:12 string GetForexName( const string Symb ) { return(SymbolIsExist(Symb) ? SymbolInfoString(Symb, SYMBOL_CURRENCY_BASE) + SymbolInfoString(Symb, SYMBOL_CURRENCY_PROFIT) : NULL); } 万能ハッシュ関数ではない」という自転車操業をしているのですね。以下は、あなたと同じ機能を持つ単純なバリエーションです。 #include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577 string GetMagicString() { return(MQLInfoString(MQL_PROGRAM_PATH/*MQL_PROGRAM_NAME*/) + _Symbol + (string)ChartID()/* + (string)_Period*/); } ulong GetMagic() { uchar Bytes[]; return(crc64(0, Bytes, StringToCharArray(GetMagicString(), Bytes))); } void OnStart() { Print(GetMagic()); } prostotrader 2018.08.25 13:00 #48 fxsaber:いつもこうなんです。 万能ハッシュ関数ではない」という自転車を作るんですね。以下は、あなたと同じ機能を持つ、シンプルなバリエーションです。 最後の2バイトは、このチャートの追加マジックのために確保されている でも、MQLに搭載されているCRCのことは忘れていました :) ありがとうございます。それなら、まったく問題ないでしょう。 fxsaber: ありがとうございます。 prostotrader 2018.08.25 13:04 #49 Vitaly Muzichenko:クラッシュすると、殺される。そのため、グローバル ターミナル変数が 作成され、「殺される」ことがないようにしているのです prostotrader 2018.08.25 13:09 #50 fxsaber:いつもこうなんです。 万能ハッシュ関数ではない」という自転車を作るんですね。以下は、あなたと同じ機能を持つ、シンプルなバリエーションです。 同じシンボルで同じEAを実行することができるので、あなたのバリアントは動作しません。 123456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ポジションがあれば、チャートが閉じたときにすべてのデータを取得 することができ、このシンボルに対する保留中の注文を単に「釘付け」にすることができます。
何のために手に入れるのか?あなたの変形例の重大な欠点は、チャートハンドルとの結合です。
誰もより良いものを考えていない(1つの同じシンボルで複数のEAを開くために)。
ハンドルから取り外すことも可能ですが、その場合は何かに接続する必要があります。例えば、EAの入力パラメータに+パス。しかし、この解決策にはデメリットもあります。
Roboforex AUDNZDの動作について
では、そのポジションや注文があるタイミングでチャートを閉じる ことで、EAが切り離された場合はどうでしょうか。
なぜ、このようなことがFXでうまくいかなかったのか、理由はよくわかりません。
何を優先して配置するかが明確でないため
EURUSDの場合はEUR、AUDNZDの場合はNZDが ベースとなります。
TERMINALグローバル変数 にマジックを格納すれば、何も失われることはありません。
今、書きます。
TERMINALグローバル変数 にマジックを格納すれば、何も失われることはありません。
書いておこう。
クラッシュすると、殺される。
何を優先して配置するかが明確でないため
EURUSDの場合はEUR、AUDNZDの場合はNZDが ベースとなります。
常に
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
FOREXにおけるシンボル名の最大長
fxsaber さん 2018.08.25 14:12
万能ハッシュ関数ではない」という自転車操業をしているのですね。以下は、あなたと同じ機能を持つ単純なバリエーションです。
いつもこうなんです。
万能ハッシュ関数ではない」という自転車を作るんですね。以下は、あなたと同じ機能を持つ、シンプルなバリエーションです。
最後の2バイトは、このチャートの追加マジックのために確保されている
でも、MQLに搭載されているCRCのことは忘れていました :) ありがとうございます。
それなら、まったく問題ないでしょう。
fxsaber: ありがとうございます。
クラッシュすると、殺される。
そのため、グローバル ターミナル変数が 作成され、「殺される」ことがないようにしているのです
いつもこうなんです。
万能ハッシュ関数ではない」という自転車を作るんですね。以下は、あなたと同じ機能を持つ、シンプルなバリエーションです。
同じシンボルで同じEAを実行することができるので、あなたのバリアントは動作しません。