初学者的问题 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()中计算出来的? 我什么都不懂,只是把一个指针 数组CArrayObj 传给OnInit()中创建的对象。 Документация по MQL5: Стандартная библиотека / Коллекции данных / CArrayObj www.mql5.com CArrayObj - Коллекции данных - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Mikhail Tkachev 2021.08.03 14:34 #13305 Artyom Trishkin:没什么好理解的,但要传递一个CArrayObj指针 数组给OnInit()中创建的对象。 Artem,谢谢你的回答。 我为不清楚的问题道歉) 在Expert Advisor中,有三个指向对象的指针型全局变量:var1、var2、var3。 在执行OnInit()之前,不知道是否需要所有这些变量(这与时间框架有关),也不知道构造函数的参数,这将初始化对象。 如何在OnInit()中创建此类变量,使其成为全局变量? Artyom Trishkin 2021.08.03 14:39 #13306 Mikhail Tkachev:Artem,谢谢你的回答。 我为不清楚的问题道歉) EA中可以使用三个指针类型的全局变量:var1、var2、var3。在执行OnInit()之前,不知道是否需要所有这些变量(这与时间框架有关),也不知道将初始化对象的构造函数的参数。 如何在OnInit()中创建这样的变量,使其成为全局变量? 我不知道你有什么神奇的构造函数,它只包含未知数:) 你不需要事先将对象声明为实例。 你需要声明一个数组CArrayObj。你的对象本身必须是CObject的后继者。 通过new创建你的对象,并在列表中添加一个指向它的指针。 创建下一个对象并将其添加到列表中,以此类推。 这个列表--一个指向它的指针(而且这个列表是全局声明的)--被传递给你的构造函数。 但这里是你打算如何做参数事先未知的构造函数--我有点不明白。试着澄清一下 Mikhail Tkachev 2021.08.03 14:53 #13307 Artyom Trishkin:但在这里,你要如何使构造函数的参数事先未知--我在这里有点迷惑。试着解释一下为每个符号的每个使用的时间框架创建 CIsNewBar类型对象。 字符是由输入参数中的一行带分隔符的指定的,所以你不能在OnInit()之前事先创建所有的对象。 也就是说,第一个未知的构造函数参数是一个符号。 第二个未知的构造函数参数是一个时间框架,因为每个符号将有它自己的时间框架集,同样由输入-参数中带有分隔符的字符串传递。 HH.CArrayObj 类存在一个问题:当访问CArrayObj* ArrayObj 类型的元素。At(0),作为At(0)的对象的类成员 是不可访问的,尽管这些类成员 完全是公共的,即ArrayObj 类型的构造。At(0).method(参数)不起作用。 我也 害怕使用这些库,也许在更新终端 时它们会有一些变化,而我的专家顾问会突然停止工作......。 Artyom Trishkin 2021.08.03 16:47 #13308 Mikhail Tkachev:为每个符号使用的每个时间框架创建 CIsNewBar类型对象。 在输入参数中,字符是由一行一行的分隔符指定的,所以不可能在OnInit()之前提前创建所有对象。 也就是说,第一个未知的构造函数参数是一个符号。 第二个未知的构造函数参数是一个时间框架,因为每个符号将有它自己的时间框架集,同样由输入-参数中带有分隔符的字符串传递。 P.S.CArrayObj 类有一个问题:当访问CArrayObj* ArrayObj 类型的元素。 At(0),At(0)的对象类成员 是不可用的,尽管这些类成员 正好是公共的,也就是ArrayObj 类型的构造。At(0).method(参数)不起作用。 我也 害怕使用这些库,也许在更新终端 时它们会有一些变化,而我的专家顾问会突然停止工作......。 这一切都错了,不知为什么... 用简单的文字写下你想做的事情。没有提到你对这一切的编码尝试。 Mikhail Tkachev 2021.08.03 17:46 #13309 Artyom Trishkin:它只是感觉不对...用简单的文字写下你想做的事情。没有提到你试图将其全部编码。 多币种专家顾问。 符号列表通过输入参数指定,即带有分隔符 "AUDUSD,EURUSD,GBPUSD... "的字符串,符号的数量没有预先定义。 对于每个符号,有两个时间框架,其 "自己 "的交易系统在此基础上工作。 相应地,有两个输入参数,字符串的界限是:各自的符号 "M1,M30,M5... "的短时间框架。" 符号 "H1,D1,H4 "的长时间框架。." 即澳元兑美元的时间框架是M1和H1,欧元兑美元的时间框架是M30和D1,等等。 在OnTick()中,对于每个符号,有必要在两个(短线和长线)时间框架上跟踪新条形的出现,以做出交易决策。 我试图尽可能简单地写出来) Artyom Trishkin 2021.08.04 00:32 #13310 Mikhail Tkachev:多币种专家顾问。 符号列表通过输入参数设置,是一个带有分隔符 "AUDUSD,EURUSD,GBPUSD... "的字符串,符号的数量没有预先定义。 对于每个符号,有两个时间框架,其 "自己 "的交易系统在此基础上工作。 相应地,有两个输入参数,字符串的界限是:各自的符号 "M1,M30,M5... "的短时间框架。" 符号 "H1,D1,H4 "的长时间框架。." 即澳元兑美元的时间框架是M1和H1,欧元兑美元的时间框架是M30和D1,等等。 在OnTick()中,对于每个符号,有必要在两个(短线和长线)时间框架上跟踪新条形的出现,以做出交易决策。 我试图用最简单的方式来写)。 你已经有了一个新酒吧的课程吗? 那么输入参数究竟是什么样子的呢? 1...132413251326132713281329133013311332133313341335133613371338...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 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()中计算出来的?
我什么都不懂,只是把一个指针 数组CArrayObj 传给OnInit()中创建的对象。
没什么好理解的,但要传递一个CArrayObj指针 数组给OnInit()中创建的对象。
Artem,谢谢你的回答。
我为不清楚的问题道歉)
在Expert Advisor中,有三个指向对象的指针型全局变量:var1、var2、var3。
在执行OnInit()之前,不知道是否需要所有这些变量(这与时间框架有关),也不知道构造函数的参数,这将初始化对象。
如何在OnInit()中创建此类变量,使其成为全局变量?
Artem,谢谢你的回答。
我为不清楚的问题道歉)
EA中可以使用三个指针类型的全局变量:var1、var2、var3。
在执行OnInit()之前,不知道是否需要所有这些变量(这与时间框架有关),也不知道将初始化对象的构造函数的参数。
如何在OnInit()中创建这样的变量,使其成为全局变量?
我不知道你有什么神奇的构造函数,它只包含未知数:)
你不需要事先将对象声明为实例。
你需要声明一个数组CArrayObj。你的对象本身必须是CObject的后继者。
通过new创建你的对象,并在列表中添加一个指向它的指针。
创建下一个对象并将其添加到列表中,以此类推。
这个列表--一个指向它的指针(而且这个列表是全局声明的)--被传递给你的构造函数。
但这里是你打算如何做参数事先未知的构造函数--我有点不明白。试着澄清一下
但在这里,你要如何使构造函数的参数事先未知--我在这里有点迷惑。试着解释一下
为每个符号的每个使用的时间框架创建 CIsNewBar类型对象。
HH.CArrayObj 类存在一个问题:当访问CArrayObj* ArrayObj 类型的元素。At(0),作为At(0)的对象的类成员 是不可访问的,尽管这些类成员 完全是公共的,即ArrayObj 类型的构造。At(0).method(参数)不起作用。字符是由输入参数中的一行带分隔符的指定的,所以你不能在OnInit()之前事先创建所有的对象。
也就是说,第一个未知的构造函数参数是一个符号。
第二个未知的构造函数参数是一个时间框架,因为每个符号将有它自己的时间框架集,同样由输入-参数中带有分隔符的字符串传递。
我也 害怕使用这些库,也许在更新终端 时它们会有一些变化,而我的专家顾问会突然停止工作......。
为每个符号使用的每个时间框架创建 CIsNewBar类型对象。
P.S.CArrayObj 类有一个问题:当访问CArrayObj* ArrayObj 类型的元素。 At(0),At(0)的对象类成员 是不可用的,尽管这些类成员 正好是公共的,也就是ArrayObj 类型的构造。At(0).method(参数)不起作用。在输入参数中,字符是由一行一行的分隔符指定的,所以不可能在OnInit()之前提前创建所有对象。
也就是说,第一个未知的构造函数参数是一个符号。
第二个未知的构造函数参数是一个时间框架,因为每个符号将有它自己的时间框架集,同样由输入-参数中带有分隔符的字符串传递。
我也 害怕使用这些库,也许在更新终端 时它们会有一些变化,而我的专家顾问会突然停止工作......。
这一切都错了,不知为什么...
用简单的文字写下你想做的事情。没有提到你对这一切的编码尝试。
它只是感觉不对...
用简单的文字写下你想做的事情。没有提到你试图将其全部编码。
多币种专家顾问。
符号列表通过输入参数指定,即带有分隔符 "AUDUSD,EURUSD,GBPUSD... "的字符串,符号的数量没有预先定义。
对于每个符号,有两个时间框架,其 "自己 "的交易系统在此基础上工作。
相应地,有两个输入参数,字符串的界限是:各自的符号 "M1,M30,M5... "的短时间框架。"
符号 "H1,D1,H4 "的长时间框架。."
即澳元兑美元的时间框架是M1和H1,欧元兑美元的时间框架是M30和D1,等等。
在OnTick()中,对于每个符号,有必要在两个(短线和长线)时间框架上跟踪新条形的出现,以做出交易决策。
我试图尽可能简单地写出来)
多币种专家顾问。
符号列表通过输入参数设置,是一个带有分隔符 "AUDUSD,EURUSD,GBPUSD... "的字符串,符号的数量没有预先定义。
对于每个符号,有两个时间框架,其 "自己 "的交易系统在此基础上工作。
相应地,有两个输入参数,字符串的界限是:各自的符号 "M1,M30,M5... "的短时间框架。"
符号 "H1,D1,H4 "的长时间框架。."
即澳元兑美元的时间框架是M1和H1,欧元兑美元的时间框架是M30和D1,等等。
在OnTick()中,对于每个符号,有必要在两个(短线和长线)时间框架上跟踪新条形的出现,以做出交易决策。
我试图用最简单的方式来写)。
你已经有了一个新酒吧的课程吗?
那么输入参数究竟是什么样子的呢?