初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1344 1...133713381339134013411342134313441345134613471348134913501351...1503 新评论 Vitaly Muzichenko 2021.09.12 17:02 #13431 Igor Makanu #:没办法如果你以编程方式调用它,你可以随机生成一个参数而你需要手动运行它,你仍然需要改变输入参数试着看看现在预定义的宏中有什么,原来是__COUNT___,现在有了随机的东西,我没有检查过__COUNT___ 是如何工作的--原来是静态的,它没有什么效果,也许你可以用随机来完成你的任务。 我找到了__RANDOM__,但我需要编译代码来改变值。或者,也许我错过了什么? #define MACRO __RANDOM__ input ulong MASlow = MACRO; // Период медленной МА 能否在运行时以某种方式改变它? __RANDOM__ Компилятор для каждого объявления __RANDOM__ подставляет в код случайное ulong-число. Fast235 2021.09.12 17:13 #13432 不是每次通话都有新号码吗? Vitaly Muzichenko 2021.09.12 17:15 #13433 Fast235 #: 每次通话不是都有一个新号码吗? 没有 Vladislav Andruschenko 2021.09.12 17:15 #13434 Fast235 #: 不是每次通话都有新号码吗? 编译器,所以在编译时。 Igor Makanu 2021.09.12 17:22 #13435 Vitaly Muzichenko #:没有 那么,这个问题就无法解决了。 问题是什么?- 你必须尝试以不同的方式来制定它。 Alexey Viktorov 2021.09.12 17:47 #13436 Vitaly Muzichenko #:没有 维塔利,这一切是为了什么?是否必须有>1个指示器窗口,才能得到一个窗口编号,并在其中放上东西? Vitaly Muzichenko 2021.09.12 17:52 #13437 Alexey Viktorov #: 维塔利,什么原因?是否必须有>1个指示器窗口,才能得到一个窗口编号,并在其中放上东西? 是的,这是正确的。 你需要得到指标所在窗口的编号。要做到这一点,点击按钮并获得数据 if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,(string)wndNum+"_butt")!=-1) { Alert("Window number:"+(string)wndNum," => Program name:"+prog_name," => Short name:"+short_name); ObjectSetInteger(0,sparam,OBJPROP_STATE,false); } mt4工作 mt5只在一个地方工作--第一个安装的地方,副本被忽略了 Vitaly Muzichenko 2021.09.12 18:10 #13438 事情发展到这一步,已经没有办法解决本周的问题了 :( //+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID //#property indicator_width1 1 input ulong MASlow = __COUNTER__; // Период медленной МА //+------------------------------------------------------------------+ int wndNum; string prog_name,short_name; double Label1Buffer[]; bool flag=false; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { prog_name=MQLInfoString(MQL_PROGRAM_NAME); int q=0; for(int k=1; k<ChartGetInteger(0,CHART_WINDOWS_TOTAL); k++) { for(int e=0; e<ChartGetInteger(0,CHART_WINDOWS_TOTAL); e++) { if(ChartIndicatorName(0,k,e)==prog_name) { q++; } } } short_name="Set ("+(string)MASlow+")"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); wndNum=ChartWindowFind(); wndNum=q; ButtonCreate(0,(string)wndNum+"_butt",44,18,40,14,CORNER_RIGHT_LOWER,"= "+(string)wndNum+" =","Alert","Arial",9,clrBlack,C'236,233,216',clrGray,false,false,false); SetIndexBuffer(0,Label1Buffer); PlotIndexSetInteger(0,PLOT_LINE_WIDTH,q+1); flag=true; Print("INIT SUCCEEDED: "+(string)wndNum," => Count: ",q); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0,(string)wndNum+"_butt"); ChartRedraw(); } //+------------------------------------------------------------------+ 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 &tick_volume[], const long &volume[], const int &spread[]) { for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++) { Label1Buffer[i] = close[i]; } if(flag==false) OnInit(); return(rates_total); } //+------------------------------------------------------------------+ //| OnChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,(string)wndNum+"_butt")!=-1) { Alert("Window number:"+(string)wndNum," => Program name:"+prog_name," => Short name:"+short_name); ObjectSetInteger(0,sparam,OBJPROP_STATE,false); } if(id==CHARTEVENT_CHART_CHANGE) { ButtonCreate(0,(string)wndNum+"_butt",44,18,40,14,CORNER_RIGHT_LOWER,"= "+(string)wndNum+" =","Alert","Arial",9,clrBlack,C'236,233,216',clrGray,false,false,false); OnInit(); } } //=============================================================================================== //--------------------------------------- Создает кнопку ---------------------------------------+ //=============================================================================================== void ButtonCreate(long chart_ID=0,string nm="Button",int xd=0,int yd=0,int width=50,int height=18,int cr=0, string text="Button",string tooltip="Button",string font="Arial",int font_size=9,color clr=clrBlack, color back_clr=C'236,233,216',color border_clr=clrNONE,bool state=false,bool selection=true,bool selectable=true,bool bc=false) { if(ObjectFind(chart_ID,nm)<0) { ObjectCreate(chart_ID,nm,OBJ_BUTTON,wndNum,0,0); ObjectSetInteger(chart_ID,nm,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,nm,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,nm,OBJPROP_CORNER,cr); ObjectSetString(chart_ID,nm,OBJPROP_TEXT,text); ObjectSetString(chart_ID,nm,OBJPROP_TOOLTIP,tooltip); ObjectSetString(chart_ID,nm,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,nm,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,nm,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,nm,OBJPROP_BORDER_COLOR,border_clr); ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,bc); ObjectSetInteger(chart_ID,nm,OBJPROP_STATE,state); ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,selectable); ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,nm,OBJPROP_HIDDEN,false); ObjectSetInteger(chart_ID,nm,OBJPROP_YDISTANCE,yd); ObjectSetInteger(chart_ID,nm,OBJPROP_ZORDER,10); ObjectSetInteger(chart_ID,nm,OBJPROP_XDISTANCE,xd); ChartRedraw(); } } //+------------------------------------------------------------------+ Alexey Viktorov 2021.09.12 18:11 #13439 Vitaly Muzichenko #:是的,这是正确的。你需要得到指标所在窗口的编号。要做到这一点,点击按钮并获得数据mt4工作mt5只在一个地方工作--第一个安装的地方,它忽略了副本。 好吧,显然这是生产力提高的结果......为什么要在不是很聪明的用户的一时兴起下重新计算指标100500次?但恰好有些功能受到保护。 可能需要在指标的短名称中输入一个外部参数。 input int MAFast = 8; // Период быстрой МА input string shortName = "1"; // Префикс… string short_name = ""; /********************************************************************\ | Custom indicator initialization function | \********************************************************************/ int OnInit() { //--- indicator buffers mapping short_name = shortName+MQLInfoString(MQL_PROGRAM_NAME) + "=Set (" + (string)MASlow + "/" + (string)MAFast + ")"; IndicatorSetString(INDICATOR_SHORTNAME, short_name); SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA); Print("INIT_SUCCEEDED"); return(INIT_SUCCEEDED); }/******************************************************************/ 它是这样工作的。经测试。 Vitaly Muzichenko 2021.09.12 18:15 #13440 Alexey Viktorov #:嗯,显然这是提高性能的结果......为什么要在一个不那么聪明的用户的心血来潮下重新计算指标100500次?但恰好有些功能受到保护。可能需要在指标的短名称中输入一个外部参数。它是这样工作的。经测试。 同样,在加载下一个副本时需要改变前缀吗? 1...133713381339134013411342134313441345134613471348134913501351...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
没办法
如果你以编程方式调用它,你可以随机生成一个参数
而你需要手动运行它,你仍然需要改变输入参数
试着看看现在预定义的宏中有什么,原来是__COUNT___,现在有了随机的东西,我没有检查过__COUNT___ 是如何工作的--原来是静态的,它没有什么效果,也许你可以用随机来完成你的任务。
我找到了__RANDOM__,但我需要编译代码来改变值。或者,也许我错过了什么?
能否在运行时以某种方式改变它?
__RANDOM__ Компилятор для каждого объявления __RANDOM__ подставляет в код случайное ulong-число.
每次通话不是都有一个新号码吗?
没有
不是每次通话都有新号码吗?
没有
那么,这个问题就无法解决了。
问题是什么?- 你必须尝试以不同的方式来制定它。
没有
维塔利,什么原因?是否必须有>1个指示器窗口,才能得到一个窗口编号,并在其中放上东西?
是的,这是正确的。
你需要得到指标所在窗口的编号。要做到这一点,点击按钮并获得数据
mt4工作
mt5只在一个地方工作--第一个安装的地方,副本被忽略了
事情发展到这一步,已经没有办法解决本周的问题了 :(
是的,这是正确的。
你需要得到指标所在窗口的编号。要做到这一点,点击按钮并获得数据
mt4工作
mt5只在一个地方工作--第一个安装的地方,它忽略了副本。
好吧,显然这是生产力提高的结果......为什么要在不是很聪明的用户的一时兴起下重新计算指标100500次?但恰好有些功能受到保护。
可能需要在指标的短名称中输入一个外部参数。
它是这样工作的。经测试。
嗯,显然这是提高性能的结果......为什么要在一个不那么聪明的用户的心血来潮下重新计算指标100500次?但恰好有些功能受到保护。
可能需要在指标的短名称中输入一个外部参数。
它是这样工作的。经测试。
同样,在加载下一个副本时需要改变前缀吗?