FOREXにおけるシンボル名の最大長 - ページ 2 123456789...12 新しいコメント prostotrader 2018.08.24 02:06 #11 本当はFORESのために何かいいことをしたかったのですが、そういうわけにもいかなかったようです。 昔、Magicのプラグインファイルを書きましたが、今はそれを微調整しています。 FXのためにやろうと思ったが、そうもいかなかった。 誰かが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バイトは、1つのEAで多くのウィザードを使用するために使用されます。 chart_id - チャートの識別に使用されます (同じシンボルをいくつでも開くことができます) マジックを使う前に、関数IsMyMagicを呼び出して、マジシャンが与えられたEAに属しているかどうかをチェックします。 Andrei Fandeev 2018.08.24 02:06 #12 prostotrader: ただ、シンボルの前に何かをつけることができる場合、どのように分析すればよいのかが不明です :(使用する通貨を "EUR" "USD" "JPY" などの配列で作成します。 そして、この関数を使用して、例えば「EURUSD」「EURJPY」「USDEUR」「USDJPY」「JPYEUR」「JPYUSD」のように、可能なすべての組み合わせをペアリングすることができるのです。 そして、その都度、分析対象のシンボル名にこの組み合わせの出現があるかどうかを確認するのです。発生した場合 - 6文字の名前が見つかります。 prostotrader 2018.08.24 02:08 #13 Andrei Fandeev:EUR" "USD" "JPY "など、使用する通貨の配列を作成します。 そして、この関数を使用して、例えば「EURUSD」「EURJPY」「USDEUR」「USDJPY」「JPYEUR」「JPYUSD」のように、可能なすべての組み合わせをペアリングすることができるのです。 そして、その都度、分析対象のシンボル名にこの組み合わせの出現があるかどうかを確認するのです。発生した場合 - 6文字の名前が見つかります。GetForexName 関数を追加してください。 Fast235 2018.08.24 02:09 #14 prostotrader:ありがとうございます。しかし、私はペアの「素」の名前(6文字)だけを取得する必要があります。 もしかしたら、誰かが既成の解決策を持っているかもしれません。追加 ただ、ペア自体の前に何かを持つことができる場合、シンボルをどのように分析するのかが不明です :(コピー機では、2つのパラメータprefixとsuffix(EURUSDの前または後の追加記号)がよく使われます。 Konstantin Nikitin 2018.08.24 07:21 #15 prostotrader:ありがとうございます。しかし、私はペアの「素」の名前(6文字)だけを取得する必要があります。 もしかしたら、誰かが既成の解決策を持っているかもしれません。追加 ただ、ペア自体の前に何かを持つことができる場合、シンボルをどのように分析するのかが不明です :(文字列検索 Aleksey Semenov 2018.08.24 08:01 #16 クライアントがエラーを起こしたので、私は本当に怖くなり、シンボル認識のための粗いキットを書かなければならないと思いました。 2016.10.16 13:08:51.633 2016.08.25 04:39 ExpertEURUSD(€),M15: OrderSend error 41062016.10.16 13:08:51.633 2016.08.25 04:40 ExpertEURUSD(€),M15: OrderSend関数の シンボル名EURUSD(ˆ) が不明です。 Vitaly Muzichenko 2018.08.24 08:15 #17 prostotrader:FXでは、ほとんどが接尾語、ごくまれに接頭語の記号がありますが、必ずベース(ペア)は大文字で、接頭語はすべて小文字で書かれているので、それをベースに考えていけばいいんです。 Konstantin Nikitin 2018.08.24 08:47 #18 Vitaly Muzichenko:FXでは、接尾辞がほとんどで、接頭辞はごくまれにしかない記号がありますが、常に基本(ペア)は大文字で、接頭辞はすべて小文字で書かれているので、これを起点にするとよいでしょう。特に入力パラメータであれば、全てをシングルケースの StringToLowerか StringToUpperに 落とし込んで、 StringFindで検索 する方が確実です。それなら、どこに何を加えても問題ない。 Alexander Bereznyak 2018.08.24 08:52 #19 通貨ペアのみ使用する場合。 ForSymbolInfoString()enum_symbol_info_string識別子商品説明物件タイプSYMBOL_BASISデリバティブの原資産名列シンボル_通貨ベース商品の基準通貨列シンボル_カレンシー_プロフィット利益通貨列シンボル_カレンシー_マージンマージンを計算する通貨列SYMBOL_BANK現在の引用元列シンボル_ディスクリプションシンボルの文字列説明列SYMBOL_FORMULAカスタムシンボルの価格構成式列SYMBOL_ISINISIN(International Securities Identification Number)システムにおける取引記号の名称。国際証券識別番号とは、証券を一意に識別する12桁の英数字のコードです。この特性の有無は、トレードサーバー側で定義されます。列シンボルページシンボルに関する情報が掲載されているウェブページのアドレス。このアドレスは、ターミナルでシンボルのプロパティを表示する際に、リンクとして表示されます列SYMBOL_PATHシンボルツリー内のパス列 環境状態 - シンボルプロパティ StringFormat():レビューと既成の例 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第14部): 銘柄オブジェクト Vitaly Muzichenko 2018.08.24 09:02 #20 Konstantin Nikitin:特に入力パラメータであれば、すべてを StringToLowerか StringToUpperの 1つのケースに落とし込み、 StringFindで検索 する方が確実です。それなら、どこに何を加えても問題ない。しかし、なぜそこで文字の長さに関係なく代入できないのか、その問題が理解できない 123456789...12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
本当はFORESのために何かいいことをしたかったのですが、そういうわけにもいかなかったようです。
昔、Magicのプラグインファイルを書きましたが、今はそれを微調整しています。
FXのためにやろうと思ったが、そうもいかなかった。
誰かがGetForexName関数を追加してくれれば、FOREXでも使える ようになります。
最後の2バイトは、1つのEAで多くのウィザードを使用するために使用されます。
chart_id - チャートの識別に使用されます (同じシンボルをいくつでも開くことができます)
マジックを使う前に、関数IsMyMagicを呼び出して、マジシャンが与えられたEAに属しているかどうかをチェックします。
ただ、シンボルの前に何かをつけることができる場合、どのように分析すればよいのかが不明です :(
使用する通貨を "EUR" "USD" "JPY" などの配列で作成します。
そして、この関数を使用して、例えば「EURUSD」「EURJPY」「USDEUR」「USDJPY」「JPYEUR」「JPYUSD」のように、可能なすべての組み合わせをペアリングすることができるのです。
そして、その都度、分析対象のシンボル名にこの組み合わせの出現があるかどうかを確認するのです。発生した場合 - 6文字の名前が見つかります。
EUR" "USD" "JPY "など、使用する通貨の配列を作成します。
そして、この関数を使用して、例えば「EURUSD」「EURJPY」「USDEUR」「USDJPY」「JPYEUR」「JPYUSD」のように、可能なすべての組み合わせをペアリングすることができるのです。
そして、その都度、分析対象のシンボル名にこの組み合わせの出現があるかどうかを確認するのです。発生した場合 - 6文字の名前が見つかります。
GetForexName 関数を追加してください。
ありがとうございます。しかし、私はペアの「素」の名前(6文字)だけを取得する必要があります。
もしかしたら、誰かが既成の解決策を持っているかもしれません。
追加
ただ、ペア自体の前に何かを持つことができる場合、シンボルをどのように分析するのかが不明です :(
コピー機では、2つのパラメータprefixとsuffix(EURUSDの前または後の追加記号)がよく使われます。
ありがとうございます。しかし、私はペアの「素」の名前(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(ˆ) が不明です。
FXでは、ほとんどが接尾語、ごくまれに接頭語の記号がありますが、必ずベース(ペア)は大文字で、接頭語はすべて小文字で書かれているので、それをベースに考えていけばいいんです。
FXでは、接尾辞がほとんどで、接頭辞はごくまれにしかない記号がありますが、常に基本(ペア)は大文字で、接頭辞はすべて小文字で書かれているので、これを起点にするとよいでしょう。
特に入力パラメータであれば、全てをシングルケースの StringToLowerか StringToUpperに 落とし込んで、 StringFindで検索 する方が確実です。それなら、どこに何を加えても問題ない。
通貨ペアのみ使用する場合。
ForSymbolInfoString()
enum_symbol_info_string
識別子
商品説明
物件タイプ
SYMBOL_BASIS
デリバティブの原資産名
列
シンボル_通貨ベース
商品の基準通貨
列
シンボル_カレンシー_プロフィット
利益通貨
列
シンボル_カレンシー_マージン
マージンを計算する通貨
列
SYMBOL_BANK
現在の引用元
列
シンボル_ディスクリプション
シンボルの文字列説明
列
SYMBOL_FORMULA
カスタムシンボルの価格構成式
列
SYMBOL_ISIN
ISIN(International Securities Identification Number)システムにおける取引記号の名称。国際証券識別番号とは、証券を一意に識別する12桁の英数字のコードです。この特性の有無は、トレードサーバー側で定義されます。
列
シンボルページ
シンボルに関する情報が掲載されているウェブページのアドレス。このアドレスは、ターミナルでシンボルのプロパティを表示する際に、リンクとして表示されます
列
SYMBOL_PATH
シンボルツリー内のパス
列
特に入力パラメータであれば、すべてを StringToLowerか StringToUpperの 1つのケースに落とし込み、 StringFindで検索 する方が確実です。それなら、どこに何を加えても問題ない。
しかし、なぜそこで文字の長さに関係なく代入できないのか、その問題が理解できない