初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1331 1...132413251326132713281329133013311332133313341335133613371338...1503 新しいコメント Green handsome 2021.07.31 13:43 #13301 インジケーターの修正にご協力ください。MT5ターミナルには表示されません。コンパイル中にエラーが発生します。 //--- descriзгo #property description "Script cria objeto grбfico de \"Texto\"." //--- janela de exibiзгo dos parвmetros de entrada durante inicializaзгo do script #property script_show_inputs //--- entrada de parвmetros do script input int IHistoryBars= 25 ; // Check Historical Data input string InpFont= "Tahoma" ; // Font Type input int InpFontSize= 7 ; // Size of fonts input color UpColor= clrGold ; // Cor Up input color DwColor= clrRoyalBlue ; // Cor Dw input color HLColor= clrAqua ; // Cor Center input bool InpBack= false ; // Objeto de fundo input bool InpSelection= false ; // Destaque para mover input bool InpHidden= true ; // Ocultar na lista de objetos input bool WithDigit= true ; // Ocultar na lista de objetos input long InpZOrder= 0 ; // Prioridade para clique do mouse int digits= 0 ,extradig= 0 ; double InpAngle= 0.0 ; // Вngulo de inclinaзгo em graus ENUM_ANCHOR_POINT InpAnchor= ANCHOR_CENTER ; // Tipo de ancoragem double gBars= 0 ; double gTotalRates= 0 ; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnInit () { digits= MathPow ( 10 , _Digits -extradig); if (WithDigit) extradig= 1 ; } //+------------------------------------------------------------------+ //| Mover ponto de ancoragem | //+------------------------------------------------------------------+ bool TextMove( const long chart_ID= 0 , // ID do grбfico const string name= "Text" , // nome do objeto datetime time= 0 , // coordenada do ponto de ancoragem do tempo double price= 0 ) // coordenada do ponto de ancoragem do preзo { //--- se a posiзгo do ponto nгo estб definida, mover para a barra atual tendo o preзo Bid if (!time) time= TimeCurrent (); if (!price) price= SymbolInfoDouble ( Symbol (), SYMBOL_BID ); //--- redefine o valor de erro ResetLastError (); //--- mover o ponto de ancoragem if (! ObjectMove (chart_ID,name, 0 ,time,price)) { Print ( __FUNCTION__ , ": falha ao mover o ponto de ancoragem! Cуdigo de erro = " , GetLastError ()); return ( false ); } //--- sucesso na execuзгo return ( true ); } //+------------------------------------------------------------------+ //| Verificar valores de ponto de ancoragem e definir valores padrгo | //| para aqueles vazios | //+------------------------------------------------------------------+ void ChangeTextEmptyPoint( datetime &time, double &price) { //--- se o tempo do ponto nгo estб definido, serб na barra atual if (!time) time= TimeCurrent (); //--- se o preзo do ponto nгo estб definido, ele terб valor Bid if (!price) price= SymbolInfoDouble ( Symbol (), SYMBOL_BID ); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { ClearMyObjects(); Print ( "Deinit Value Chart, reason = " + IntegerToString (reason)); } //+------------------------------------------------------------------+ //| Value Chart | //+------------------------------------------------------------------+ int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &Time[], const double &Open[], const double &High[], const double &Low[], const double &Close[], const long &TickVolume[], const long &Volume[], const int &Spread[]) { //--- definir a forma como muitas vezes os textos serгo exibidos int scale=( int ) ChartGetInteger ( 0 , CHART_SCALE ); int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS )+ 3 ; double value; digits= MathPow ( 10 , _Digits -extradig); //--- definir o passo int step= 1 ; switch (scale) { case 0 : step= 12 ; break ; case 1 : step= 6 ; break ; case 2 : step= 4 ; break ; case 3 : step= 2 ; break ; } gTotalRates=rates_total; gBars=bars; for ( int i=rates_total- 1 ;i>rates_total-bars;i-=step) { if (Close[i]>Open[i]) { // bullish candle value=(Close[i]-Open[i])*digits; //Print(Close[i]-Open[i], "->", Close[i]-Open[i]*digits); TextCreate( 0 , "Text_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],(Close[i]+Open[i])/ 2 , DoubleToString (value,extradig),InpFont,InpFontSize, UpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder); value=(Open[i]-Low[i]) *digits; if (!TextCreate( 0 , "TextL_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],Low[i], DoubleToString (value,extradig),InpFont,InpFontSize, HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) { return 0 ; } value=(High[i]-Close[i]) *digits; if (!TextCreate( ChartID (), "TextH_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],High[i], DoubleToString (value,extradig),InpFont,InpFontSize, HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) { return 0 ; } } else { value=(Open[i]-Close[i]) *digits; if (!TextCreate( ChartID (), "Text_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],(Close[i]+Open[i])/ 2 , DoubleToString (value,extradig),InpFont,InpFontSize, DwColor,-InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) { return 0 ; } value=(Close[i]-Low[i]) *digits; if (!TextCreate( ChartID (), "TextL_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],Low[i], DoubleToString (value,extradig),InpFont,InpFontSize, HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) { return 0 ; } value=(High[i]-Open[i]) *digits; if (!TextCreate( ChartID (), "TextH_" +( string )i+( string ) PERIOD_CURRENT , 0 ,Time[i],High[i], DoubleToString (value,extradig),InpFont,InpFontSize, HLColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) { return 0 ; } } } ChartRedraw (); return 0 ; } //+------------------------------------------------------------------+ //| Trace Arrow Function | //+------------------------------------------------------------------+ void Trace( string name, int sens, double price, datetime time, color couleur) { ObjectCreate ( 0 ,name, OBJ_ARROW , 0 ,time,price); if (sens== 1 ) ObjectSetInteger ( 0 ,name, OBJPROP_ARROWCODE , 233 ); if (sens==- 1 ) ObjectSetInteger ( 0 ,name, OBJPROP_ARROWCODE , 234 ); ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,couleur); ObjectSetInteger ( 0 ,name, OBJPROP_WIDTH , 5 ); } //+------------------------------------------------------------------+ //| Delete Arrow Function | //+------------------------------------------------------------------+ void ClearMyObjects() { string name; int scale=( int ) ChartGetInteger ( 0 , CHART_SCALE ); int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS )+ 3 ; double value; digits= MathPow ( 10 , _Digits -extradig); int step= 1 ; switch (scale) { case 0 : step= 12 ; break ; case 1 : step= 6 ; break ; case 2 : step= 4 ; break ; case 3 : step= 2 ; break ; } for ( int i=gTotalRates- 1 ;i>gTotalRates-bars;i-=step) { if (!TextDelete( ChartID (), "Text_" +( string )i+( string ) PERIOD_CURRENT )){} if (!TextDelete( ChartID (), "TextH_" +( string )i+( string ) PERIOD_CURRENT )){} if (!TextDelete( ChartID (), "TextL_" +( string )i+( string ) PERIOD_CURRENT )){} //--- redesenhar o grбfico } ChartRedraw (); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Alterar o texto do objeto | //+------------------------------------------------------------------+ bool TextChange( const long chart_ID= 0 , // ID do Grбfico const string name= "Text" , // nome do objeto const string text= "Text" ) // texto { //--- redefine o valor de erro ResetLastError (); //--- alterar texto do objeto if (! ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text)) { Print ( __FUNCTION__ , ": falha ao alterar texto! Cуdigo de erro = " , GetLastError ()); return ( false ); } //--- sucesso na execuзгo return ( true ); } //+------------------------------------------------------------------+ //| Excluir objeto Texto | //+------------------------------------------------------------------+ bool TextDelete( const long chart_ID= 0 , // Id do Grбfico const string name= "Text" ) // nome do objeto { //--- redefine o valor de erro ResetLastError (); //--- excluir o objeto if (! ObjectDelete (chart_ID,name)) { Print ( __FUNCTION__ , ": falha ao excluir o objeto \"Texto\"! Cуdigo de erro = " , GetLastError ()); return ( false ); } //--- sucesso na execuзгo return ( true ); } //+------------------------------------------------------------------+ //| Criando objeto Texto | //+------------------------------------------------------------------+ bool TextCreate( const long chart_ID= 0 , // ID do grбfico const string name= "Text" , // nome do objeto const int sub_window= 0 , // нndice da sub-janela datetime time= 0 , // ponto de ancoragem do tempo double price= 0 , // ponto de ancoragem do preзo const string text= "Text" , // o prуprio texto const string font= "Arial" , // fonte const int font_size= 10 , // tamanho da fonte const color clr= clrRed , // cor const double angle= 0.0 , // inclinaзгo do texto const ENUM_ANCHOR_POINT anchor= ANCHOR_CENTER , // tipo de ancoragem const bool back= false , // no fundo const bool selection= false , // destaque para mover const bool hidden= true , // ocultar na lista de objetos const long z_order= 0 ) // prioridade para clicar no mouse { if ( ObjectFind (chart_ID,name)==- 1 ) { //--- definir as coordenadas de pontos de ancoragem, se eles nгo estгo definidos //--- redefine o valor de erro ResetLastError (); //--- criar objeto Texto if (! ObjectCreate (chart_ID,name, OBJ_TEXT ,sub_window,time,price)) { Print ( __FUNCTION__ , ": falha ao criar objeto \"Texto\"! Cуdigo de erro = " , GetLastError ()); return ( false ); } //--- definir o texto ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text); //--- definir o texto fonte ObjectSetString (chart_ID,name, OBJPROP_FONT ,font); //--- definir tamanho da fonte ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size); //--- definir o вngulo de inclinaзгo do texto ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle); //--- tipo de definiзгo de ancoragem ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor); ObjectSetInteger (chart_ID,name, OBJPROP_ALIGN , ALIGN_CENTER ); //--- definir cor ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); //--- exibir em primeiro plano (false) ou fundo (true) ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back); //--- habilitar (true) ou desabilitar (false) o modo de mover o objeto com o mouse ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection); //--- ocultar (true) ou exibir (false) o nome do objeto grбfico na lista de objeto ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden); //--- definir a prioridade para receber o evento com um clique do mouse no grбfico ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order); ObjectSetDouble (chart_ID,name, OBJPROP_PRICE ,price); ObjectSetInteger (chart_ID,name, OBJPROP_TIME ,time); //--- sucesso na execuзгo return ( true ); } else { ChangeTextEmptyPoint(time,price); ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text); ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr); ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor); ObjectSetInteger (chart_ID,name, OBJPROP_ALIGN , ALIGN_CENTER ); ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle); ObjectSetDouble (chart_ID,name, OBJPROP_PRICE ,price); ObjectSetInteger (chart_ID,name, OBJPROP_TIME ,time); ObjectSetString (chart_ID,name, OBJPROP_FONT ,font); //--- definir tamanho da fonte ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size); ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE , 100 ); /*ObjectSetString(chart_ID,name,OBJPROP_FONT,Font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,Size);*/ return ( true ); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent ( const int id, // Event ID const long & lparam, // Parameter of type long event const double & dparam, // Parameter of type double event const string & sparam // Parameter of type string events ) { if (id== CHARTEVENT_CHART_CHANGE ) { ClearMyObjects(); } } //+------------------------------------------------------------------+ ファイル: bamp2k.jpg 164 kb candle_size_info_jj.mq5 30 kb Maxim Kuznetsov 2021.07.31 16:17 #13302 Green handsome:MT5ターミナルに表示されない、コンパイル時にエラーが出る、インジケーターの修正をお願いします。 最も簡単な方法は、OnCalculate で ArraySetAsSeries(Open,true) ;ArraySetAsSeries(Close,true) ;などを すべての配列の先頭に設定することである。 これは、平らな場所での伝統的な驚きです。5では、デフォルトのインデックスの方向が 4と異なっています。 インジケータはバッファを使用せず、グラフオブジェクトを構築するだけです - 起動後にCtrl+Bを押して、グラフがどこに配置されるか確認してください Mikhail Tkachev 2021.08.03 14:22 #13303 ドキュメントやフォーラムを掘り起こすと......。 ポインタ型の変数を OnInit()で文字列で作成した場合、グローバル 変数(例ではvar)にするにはどうしたらよいでしょうか。 CObj* var=new CObj(p1,p2,p3); で、オブジェクトの数やコンストラクタのパラメータは事前にわからず、OnInit()の中で計算されるのでしょうか? Artyom Trishkin 2021.08.03 14:25 #13304 Mikhail Tkachev:ドキュメントやフォーラムを掘り起こすと......。 ポインタ型の変数を OnInit()で作成した場合、グローバル 変数にする方法。で、オブジェクトの数やコンストラクタのパラメータは事前にわからず、OnInit()の中で計算されるのでしょうか? 私は何も理解していませんが、OnInit()で作成されたオブジェクトにポインタの 配列CArrayObjを 渡します。 Документация по MQL5: Стандартная библиотека / Коллекции данных / CArrayObj www.mql5.com CArrayObj - Коллекции данных - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Mikhail Tkachev 2021.08.03 14:34 #13305 Artyom Trishkin:私は何も理解していませんが、OnInit()で作成されたオブジェクトにCArrayObjのポインタの 配列を渡してください。 Artemさん、ご返信ありがとうございます。 不明確な質問で申し訳ありません) Expert Advisor には、オブジェクトへのポインタ型のグローバル変数が3つあります:var1, var2, var3です。 OnInit()を実行する前に、これらの変数がすべて必要になるかどうかは不明です(これは時間枠に関係します)。また、オブジェクトを初期化するコンストラクタのパラメータも不明です。 このような変数をOnInit()で作成し、グローバルな変数にする方法は? Artyom Trishkin 2021.08.03 14:39 #13306 Mikhail Tkachev:Artemさん、ご返信ありがとうございます。 不明確な質問で申し訳ありません) EAで使用できるポインタ型のグローバル変数は、var1、var2、var3の3つです。OnInit()を実行する前に、これらの変数がすべて必要になるかどうかはわかりませんし(時間軸に関係します)、オブジェクトを初期化するコンストラクタのパラメータも不明です。 このような変数をOnInit()で作成し、グローバルな変数にするにはどうしたらよいでしょうか。 未知数なものだけを含む魔法のようなコンストラクタがあるのか、私にはわかりません :) オブジェクトをあらかじめインスタンスとして宣言しておく必要はない。 配列CArrayObjを1つ宣言する必要があります。オブジェクト自体はCObjectの子孫 でなければなりません。 newでオブジェクトを作成し、そのポインタをリストに追加します。 次のオブジェクトを作成し、リストに追加する、といった具合です。 このリスト-へのポインタ(リストはグローバルに宣言されている)は、あなたのコンストラクタに渡されます。 しかし、ここで事前に引数がわからないコンストラクタをどうするつもりだったのか......ちょっと理解できない。明確にしようとする Mikhail Tkachev 2021.08.03 14:53 #13307 Artyom Trishkin:しかし、ここで、あらかじめ引数がわからないコンストラクタを作るのか、ちょっと混乱します。説明してみてください各シンボルの使用される時間枠ごとにCINewBarタイプのオブジェクトを作成 する。 入力パラメータで文字を区切り記号付きで1行ずつ指定するため、OnInit()の前にあらかじめすべてのオブジェクトを作成しておくことはできません。 すなわち、最初の未知のコンストラクタ・パラメータはシンボルである。 2番目の未知のコンストラクタ・パラメータはタイムフレームで、各シンボルは独自のタイムフレーム・セットを持ち、同様にinput-parameterにデリミタ付きの文字列で渡されるからである。 HH.CArrayObj クラスに問題がありました:CArrayObj* ArrayObj 型の要素にアクセスするとき。At(0)であるオブジェクトのクラス メンバは、ArrayObj 型の構成要素であり、まさにpublicであるが、アクセスは不可能である。At(0).method(parameter)が動作しない。 また、これらのライブラリを使用すると、ターミナルを更新 する際に何かが変更され、Expert Advisorが突然動作しなくなるかもしれないので、怖いのです...。 Artyom Trishkin 2021.08.03 16:47 #13308 Mikhail Tkachev:各シンボルに使用される各タイムフレームに対してCINewBarタイプのオブジェクトを作成 する。 入力パラメータで文字を区切り記号付きで1行ずつ指定するため、OnInit()の前にある全てのオブジェクトをあらかじめ作成することはできません。 すなわち、最初の未知のコンストラクタ・パラメータはシンボルである。 2番目の未知のコンストラクタ・パラメータはタイムフレームで、各シンボルは独自のタイムフレーム・セットを持ち、同様にinput-parameterにデリミタ付きの文字列で渡されるからである。 追伸:CArrayObj クラスで、CArrayObj* 型の要素にアクセスする際に、問題が発生しました。At(0) が利用できないオブジェクトクラスのメンバは、これらのクラスメンバが まさにパブリック、すなわちArrayObj 型のコンストラクトであるにもかかわらず、です。At(0).method(parameter)が動作しない。 また、これらのライブラリを使用すると、ターミナルを更新 する際に何かが変更され、Expert Advisorが突然動作しなくなるかもしれないので、怖いのです...。 なんだかおかしいな...。 やりたいことをシンプルな言葉で書く。あなたのコード化の試みに一切言及することなく。 Mikhail Tkachev 2021.08.03 17:46 #13309 Artyom Trishkin:なんだかしっくりこない...。やりたいことをシンプルな言葉で書く。あなたのコード化の試みには一切触れずに。 マルチカレンシー・エキスパート・アドバイザー。 シンボルのリストは入力パラメータで指定します。デリミタは "AUDUSD,EURUSD,GBPUSD..." で、シンボルの数は事前に定義されていません。 各シンボルには2つのタイムフレームがあり、その上で「独自の」取引システムが動作します。 入力パラメータは2つあり、それぞれのシンボル "M1,M30,M5... "に対する短い時間枠で区切られた文字列である。" H1,D1,H4 "というそれぞれのシンボルの長いタイムフレームを表示します。." 例えば、AUDUSDの場合はM1とH1、EURUSDの場合はM30とD1などのタイムフレームがあります。 OnTick()では、各シンボルについて、取引の意思決定を行うために、両方の(短い、長い)タイムフレームで新しいバーの出現を追跡することが必要である。 なるべくシンプルに書くように心がけました) Artyom Trishkin 2021.08.04 00:32 #13310 Mikhail Tkachev:マルチカレンシー・エキスパート・アドバイザー。 シンボルのリストは、入力パラメータ、セパレータ "AUDUSD、EURUSD、GBPUSD... "と文字列を介して設定され、シンボルの数は、事前に定義されていません。 各シンボルには2つのタイムフレームがあり、その上で「独自の」取引システムが動作します。 入力パラメータは2つあり、それぞれのシンボル "M1,M30,M5... "に対する短い時間枠で区切られた文字列である。" H1,D1,H4 "というそれぞれのシンボルの長いタイムフレームを表示します。." 例えば、AUDUSDの場合はM1とH1、EURUSDの場合はM30とD1などのタイムフレームがあります。 OnTick()では、各シンボルについて、取引の意思決定を行うために、両方の(短い、長い)タイムフレームで新しいバーの出現を追跡することが必要である。 なるべくわかりやすく書いたつもりです) 新しいバーのクラスはすでにあるのでしょうか? また、入力パラメータは具体的にどのようなものなのでしょうか? 1...132413251326132713281329133013311332133313341335133613371338...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
インジケーターの修正にご協力ください。MT5ターミナルには表示されません。コンパイル中にエラーが発生します。
MT5ターミナルに表示されない、コンパイル時にエラーが出る、インジケーターの修正をお願いします。
最も簡単な方法は、OnCalculate で ArraySetAsSeries(Open,true) ;ArraySetAsSeries(Close,true) ;などを すべての配列の先頭に設定することである。
これは、平らな場所での伝統的な驚きです。5では、デフォルトのインデックスの方向が 4と異なっています。
インジケータはバッファを使用せず、グラフオブジェクトを構築するだけです - 起動後にCtrl+Bを押して、グラフがどこに配置されるか確認してください
ドキュメントやフォーラムを掘り起こすと......。
ポインタ型の変数を OnInit()で文字列で作成した場合、グローバル 変数(例ではvar)にするにはどうしたらよいでしょうか。
CObj* var=new CObj(p1,p2,p3);
で、オブジェクトの数やコンストラクタのパラメータは事前にわからず、OnInit()の中で計算されるのでしょうか?
ドキュメントやフォーラムを掘り起こすと......。
ポインタ型の変数を OnInit()で作成した場合、グローバル 変数にする方法。
で、オブジェクトの数やコンストラクタのパラメータは事前にわからず、OnInit()の中で計算されるのでしょうか?
私は何も理解していませんが、OnInit()で作成されたオブジェクトにポインタの 配列CArrayObjを 渡します。
私は何も理解していませんが、OnInit()で作成されたオブジェクトにCArrayObjのポインタの 配列を渡してください。
Artemさん、ご返信ありがとうございます。
不明確な質問で申し訳ありません)
Expert Advisor には、オブジェクトへのポインタ型のグローバル変数が3つあります:var1, var2, var3です。
OnInit()を実行する前に、これらの変数がすべて必要になるかどうかは不明です(これは時間枠に関係します)。また、オブジェクトを初期化するコンストラクタのパラメータも不明です。
このような変数をOnInit()で作成し、グローバルな変数にする方法は?
Artemさん、ご返信ありがとうございます。
不明確な質問で申し訳ありません)
EAで使用できるポインタ型のグローバル変数は、var1、var2、var3の3つです。
OnInit()を実行する前に、これらの変数がすべて必要になるかどうかはわかりませんし(時間軸に関係します)、オブジェクトを初期化するコンストラクタのパラメータも不明です。
このような変数をOnInit()で作成し、グローバルな変数にするにはどうしたらよいでしょうか。
未知数なものだけを含む魔法のようなコンストラクタがあるのか、私にはわかりません :)
オブジェクトをあらかじめインスタンスとして宣言しておく必要はない。
配列CArrayObjを1つ宣言する必要があります。オブジェクト自体はCObjectの子孫 でなければなりません。
newでオブジェクトを作成し、そのポインタをリストに追加します。
次のオブジェクトを作成し、リストに追加する、といった具合です。
このリスト-へのポインタ(リストはグローバルに宣言されている)は、あなたのコンストラクタに渡されます。
しかし、ここで事前に引数がわからないコンストラクタをどうするつもりだったのか......ちょっと理解できない。明確にしようとする
しかし、ここで、あらかじめ引数がわからないコンストラクタを作るのか、ちょっと混乱します。説明してみてください
各シンボルの使用される時間枠ごとにCINewBarタイプのオブジェクトを作成 する。
HH.CArrayObj クラスに問題がありました:CArrayObj* ArrayObj 型の要素にアクセスするとき。At(0)であるオブジェクトのクラス メンバは、ArrayObj 型の構成要素であり、まさにpublicであるが、アクセスは不可能である。At(0).method(parameter)が動作しない。入力パラメータで文字を区切り記号付きで1行ずつ指定するため、OnInit()の前にあらかじめすべてのオブジェクトを作成しておくことはできません。
すなわち、最初の未知のコンストラクタ・パラメータはシンボルである。
2番目の未知のコンストラクタ・パラメータはタイムフレームで、各シンボルは独自のタイムフレーム・セットを持ち、同様にinput-parameterにデリミタ付きの文字列で渡されるからである。
また、これらのライブラリを使用すると、ターミナルを更新 する際に何かが変更され、Expert Advisorが突然動作しなくなるかもしれないので、怖いのです...。
各シンボルに使用される各タイムフレームに対してCINewBarタイプのオブジェクトを作成 する。
追伸:CArrayObj クラスで、CArrayObj* 型の要素にアクセスする際に、問題が発生しました。At(0) が利用できないオブジェクトクラスのメンバは、これらのクラスメンバが まさにパブリック、すなわちArrayObj 型のコンストラクトであるにもかかわらず、です。At(0).method(parameter)が動作しない。入力パラメータで文字を区切り記号付きで1行ずつ指定するため、OnInit()の前にある全てのオブジェクトをあらかじめ作成することはできません。
すなわち、最初の未知のコンストラクタ・パラメータはシンボルである。
2番目の未知のコンストラクタ・パラメータはタイムフレームで、各シンボルは独自のタイムフレーム・セットを持ち、同様にinput-parameterにデリミタ付きの文字列で渡されるからである。
また、これらのライブラリを使用すると、ターミナルを更新 する際に何かが変更され、Expert Advisorが突然動作しなくなるかもしれないので、怖いのです...。
なんだかおかしいな...。
やりたいことをシンプルな言葉で書く。あなたのコード化の試みに一切言及することなく。
なんだかしっくりこない...。
やりたいことをシンプルな言葉で書く。あなたのコード化の試みには一切触れずに。
マルチカレンシー・エキスパート・アドバイザー。
シンボルのリストは入力パラメータで指定します。デリミタは "AUDUSD,EURUSD,GBPUSD..." で、シンボルの数は事前に定義されていません。
各シンボルには2つのタイムフレームがあり、その上で「独自の」取引システムが動作します。
入力パラメータは2つあり、それぞれのシンボル "M1,M30,M5... "に対する短い時間枠で区切られた文字列である。"
H1,D1,H4 "というそれぞれのシンボルの長いタイムフレームを表示します。."
例えば、AUDUSDの場合はM1とH1、EURUSDの場合はM30とD1などのタイムフレームがあります。
OnTick()では、各シンボルについて、取引の意思決定を行うために、両方の(短い、長い)タイムフレームで新しいバーの出現を追跡することが必要である。
なるべくシンプルに書くように心がけました)
マルチカレンシー・エキスパート・アドバイザー。
シンボルのリストは、入力パラメータ、セパレータ "AUDUSD、EURUSD、GBPUSD... "と文字列を介して設定され、シンボルの数は、事前に定義されていません。
各シンボルには2つのタイムフレームがあり、その上で「独自の」取引システムが動作します。
入力パラメータは2つあり、それぞれのシンボル "M1,M30,M5... "に対する短い時間枠で区切られた文字列である。"
H1,D1,H4 "というそれぞれのシンボルの長いタイムフレームを表示します。."
例えば、AUDUSDの場合はM1とH1、EURUSDの場合はM30とD1などのタイムフレームがあります。
OnTick()では、各シンボルについて、取引の意思決定を行うために、両方の(短い、長い)タイムフレームで新しいバーの出現を追跡することが必要である。
なるべくわかりやすく書いたつもりです)
新しいバーのクラスはすでにあるのでしょうか?
また、入力パラメータは具体的にどのようなものなのでしょうか?