FOREXにおけるシンボル名の最大長 - ページ 4 123456789101112 新しいコメント prostotrader 2018.08.24 15:50 #31 現在、FOREXでも使用可能です(_BTCUSD_iのような「曲がった」文字も使用可能です)。 //+------------------------------------------------------------------+ //| 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); 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 != "") { 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); } //+------------------------------------------------------------------+ Slava 2018.08.25 12:06 #32 prostotrader:FOREXで使えるようになりました(_BTCUSD_iなどの「変な」文字もOKです) コドベースへ fxsaber 2018.08.25 12:29 #33 prostotrader:昔、Magicを自動で取得するプラグインファイルを書いたことがあります。課題は何だったのでしょうか? 曲がったシンボルに「FOREX done.」と表示されることを確認してください。EURUSD」には表示されません。 ベースとなる記号は、常にペアの最初にあるのですか?カスタムシンボルは何でもありです。おそらく、カスタムのものでこのようなチェックを実行するのが最も便利な方法でしょう。 エスゼット トレーディング、自動売買システム、ストラテジーテストに関するフォーラム ライブラリ: AutoMagic ドミトリー・フェドセーエフ, 2017.02.03 13:31 チャートハンドルを 使ってマジックを形成するということは、誤ってチャートを閉じてしまうと、その注文は失われてしまうということです。 prostotrader 2018.08.25 13:51 #34 fxsaber:EURUSDでは表示されません。 SZY 修正済み ZYに追加されました。 より良いものを書く fxsaber 2018.08.25 13:58 #35 prostotrader:修正済み今は動いています。では、実践編として一言お願いします。 ZS "AUDNZD"... prostotrader 2018.08.25 14:06 #36 fxsaber:今は動いています。では、実践編として一言お願いします。 ZS "AUDNZD"...チャート上にEA用のユニークなMagikを自動的に作成し、65535個の追加Magikを使用することが可能です。追加 FOREXは持っていない。 GetForexName 関数を確認せずに書いて しまいました。 fxsaber 2018.08.25 14:12 #37 prostotrader:チャート上にEA用のユニークなMagikを自動的に作成し、65535個の追加Magikを使用することが可能です。では、そのポジションや注文があるタイミングでチャートを閉じる ことで、EAが切り離された場合はどうでしょうか。 なぜ、このようなことがFXでうまくいかなかったのか、理由はよくわかりません。 bool SymbolIsExist( const string Symb = NULL ) { ResetLastError(); SymbolInfoInteger((Symb == NULL) ? _Symbol : Symb, SYMBOL_CUSTOM); return(::GetLastError() != ERR_MARKET_UNKNOWN_SYMBOL); } string GetForexName( const string Symb ) { return(SymbolIsExist(Symb) ? SymbolInfoString(Symb, SYMBOL_CURRENCY_BASE) + SymbolInfoString(Symb, SYMBOL_CURRENCY_PROFIT) : NULL); } void OnStart() { Print(GetForexName(_Symbol)); } fxsaber 2018.08.25 14:16 #38 prostotrader:FOREXは持っていない。Do - MQ-Demo. prostotrader 2018.08.25 14:17 #39 fxsaber:では、ポジション・注文があるタイミングでチャートを閉じる ことで、EAが切れる場合はどうでしょうか。 ポジションがある場合、チャートが閉じられたときにすべてのデータを取得することができ、このシンボルの保留中の注文を単に「釘付け」にすることができます。 まだ誰も良いアイデアを思いついていない(同じシンボルで複数のEAを開くための)。 prostotrader 2018.08.25 14:20 #40 fxsaber:ZS "AUDNZD"...AUDNZDはRoboforexで動作します。 123456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
現在、FOREXでも使用可能です(_BTCUSD_iのような「曲がった」文字も使用可能です)。
FOREXで使えるようになりました(_BTCUSD_iなどの「変な」文字もOKです)
コドベースへ
昔、Magicを自動で取得するプラグインファイルを書いたことがあります。
課題は何だったのでしょうか?
EURUSD」には表示されません。
ベースとなる記号は、常にペアの最初にあるのですか?
カスタムシンボルは何でもありです。おそらく、カスタムのものでこのようなチェックを実行するのが最も便利な方法でしょう。
エスゼット
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ: AutoMagic
ドミトリー・フェドセーエフ, 2017.02.03 13:31
チャートハンドルを 使ってマジックを形成するということは、誤ってチャートを閉じてしまうと、その注文は失われてしまうということです。
EURUSDでは表示されません。
SZY
修正済み
ZYに追加されました。
より良いものを書く
修正済み
今は動いています。では、実践編として一言お願いします。
ZS "AUDNZD"...
今は動いています。では、実践編として一言お願いします。
ZS "AUDNZD"...
チャート上にEA用のユニークなMagikを自動的に作成し、65535個の追加Magikを使用することが可能です。
追加
FOREXは持っていない。
GetForexName 関数を確認せずに書いて しまいました。
チャート上にEA用のユニークなMagikを自動的に作成し、65535個の追加Magikを使用することが可能です。
では、そのポジションや注文があるタイミングでチャートを閉じる ことで、EAが切り離された場合はどうでしょうか。
なぜ、このようなことがFXでうまくいかなかったのか、理由はよくわかりません。
FOREXは持っていない。
Do - MQ-Demo.
では、ポジション・注文があるタイミングでチャートを閉じる ことで、EAが切れる場合はどうでしょうか。
ポジションがある場合、チャートが閉じられたときにすべてのデータを取得することができ、このシンボルの保留中の注文を単に「釘付け」にすることができます。
まだ誰も良いアイデアを思いついていない(同じシンボルで複数のEAを開くための)。
ZS "AUDNZD"...
AUDNZDはRoboforexで動作します。