初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1302 1...129512961297129812991300130113021303130413051306130713081309...1503 新评论 Vladimir Karputov 2021.04.09 13:19 #13011 User_mt5:弗拉基米尔-卡尔普托夫,还有我?) 我不能确定,但可以试试0.0。 新增: 在MQL5中似乎不能取消'INDICATOR_MINIMUM'和'INDICATOR_MAXIMUM'。 User_mt5 2021.04.09 13:44 #13012 Vladimir Karputov:我不能确定,但可以试试0.0。新增: 似乎'INDICATOR_MINIMUM'和'INDICATOR_MAXIMUM'不能被MQL5取消。 唉......。 谢谢你的答复。 (其实关卡也有同样的问题;但通过设置关卡数量 来解决)。 Alexey Viktorov 2021.04.09 14:02 #13013 User_mt5:唉......。谢谢你的答复。(关卡的问题实际上是一样的;但通过设置关卡的数量 来解决) 实验,一切都会成功的。 Vladimir Karputov 2021.04.09 14:12 #13014 User_mt5: 我比较了图表保存的属性(以'随机振荡器'指标为例)。 <indicator> name=Stochastic Oscillator path= apply=0 show_data=1 scale_inherit=0 scale_line=0 scale_line_percent=50 scale_line_value=0.000000 scale_fix_min=1 scale_fix_min_val=0.000000 scale_fix_max=1 scale_fix_max_val=100.000000 expertmode=0 fixed_height=-1 <indicator> name=Stochastic Oscillator path= apply=0 show_data=1 scale_inherit=0 scale_line=0 scale_line_percent=50 scale_line_value=0.000000 scale_fix_min=0 scale_fix_min_val=-10.500000 scale_fix_max=0 scale_fix_max_val=110.500000 expertmode=0 fixed_height=-1 这显然是一个'bool'类型的属性,但从MQL5语言中无法访问这个属性。 User_mt5 2021.04.09 14:35 #13015 Vladimir Karputov:我比较了图表保存的属性(以'随机振荡器'指标为例)。它显然是一个'bool'类型的属性,但从MQL5中无法访问这个属性。 是的,唉。 再次感谢) Maksym Mudrakov 2021.04.09 16:41 #13016 有一个问题。使用该函数(见下文),我们可以通过历史上的头寸ID获得TakeProfit和StopLoss值(即当头寸已经平仓时),该函数在实时中起作用,但在策略测试器中,它无法找到TakeProfit和StopLoss,因为它没有看到设置止损的历史订单(重要的是,这些止损是在开仓后设置的)。 问题:我如何使用策略测试器根据票据找出平仓的TP/Loss? #include <Trade\DealInfo.mqh> #include <Trade\HistoryOrderInfo.mqh> CDealInfo deal; CHistoryOrderInfo ord; void GetPosStops(ulong ticket, int& tp, int& sl, double& lot){ HistorySelectByPosition(ticket); tp=0;sl=0; double open=0, tp_=0, sl_=0; string symbol=""; ENUM_DEAL_TYPE type=-1; for(int i=0; i<HistoryDealsTotal(); i++){ if(!deal.SelectByIndex(i))continue; if(deal.Entry() ==DEAL_ENTRY_IN){ open=deal.Price(); symbol=deal.Symbol(); type=deal.DealType(); lot=deal.Volume(); break; } } for(int i=0; i<HistoryOrdersTotal(); i++){ if(!ord.SelectByIndex(i))continue; if(tp_==0)tp_=ord.TakeProfit(); if(sl_==0)sl_=ord.StopLoss(); if(tp_>0 && sl_>0)break; } if(symbol !=""){ double coef=type==DEAL_TYPE_BUY ? 1:-1; double point=SymbolInfoDouble(symbol,SYMBOL_POINT); if(tp_>0 && coef*tp_>coef*open) tp=(int)(MathAbs(tp_-open)/point); if(sl_>0 && coef*sl_<coef*open) sl=(int)(MathAbs(sl_-open)/point); } } Ancorage 2021.04.09 22:25 #13017 大家好!,我只是想对EA进行编程,我想先写一个统计 传播收集器。,我的意思是,我希望它能做什么?在测试器中,一个EA启动并收集一定时间段内的tick历史数据,例如10天。 然后它在csv或xlsx文件中生成以下数据: 一段时间的平均点差:服务器上的00:00-09:00,09:00-18:00,18:00-00:00(所有10天),这段时间的最大点差,整个10天内货币对的最小点差和平均点差。 我真的厌倦了手动收集这些数据。 我知道有一些程序可以自己做...但我想拥有自己的,作为一种锻炼。,也许尊敬的行家可以告诉我从哪里开始?而且,是否有可能写出这样的程序?,预先感谢所有回复并对一个新人表示同情的人。 Pavel Komarovsky 2021.05.04 07:42 #13018 大家好。也许有人有现成的代码。有2个参数,存款=3000,手数为0.01,即存款3000手数为0.01,现在严格按翻倍计算,即存款6000手数为0.02,9000手数为0.03,怎么做? Vladimir Karputov 2021.05.04 08:04 #13019 Pavel Komarovsky:大家好。也许有人有现成的代码。有2个参数,存款=3000,手数为0.01,即存款3000手数为0.01,现在严格按翻倍计算,即存款6000手数为0.02,9000手数为0.03,怎么做? 它大致是这样的。 //+------------------------------------------------------------------+ //| Script 1.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double start_deposit=3000; double start_lot=0.01; double deposit=start_deposit; for(int i=0; i<10; i++) { double d=MathFloor(deposit/start_deposit); Print(i,"#: ,deposit ",DoubleToString(deposit,2),", d ",DoubleToString(d*start_lot,2)); //--- deposit=deposit+start_deposit*0.55; } } //+------------------------------------------------------------------+ 结果。 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 0#: ,deposit 3000.00, d 0.01 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 1#: ,deposit 4650.00, d 0.01 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 2#: ,deposit 6300.00, d 0.02 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 3#: ,deposit 7950.00, d 0.02 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 4#: ,deposit 9600.00, d 0.03 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 5#: ,deposit 11250.00, d 0.03 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 6#: ,deposit 12900.00, d 0.04 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 7#: ,deposit 14550.00, d 0.04 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 8#: ,deposit 16200.00, d 0.05 2021.05.04 09:03:15.246 Script 1 (EURUSD,H1) 9#: ,deposit 17850.00, d 0.05 附加的文件: Script_1.mq5 3 kb afsmerinostra 2021.05.04 21:53 #13020 好时光。 请帮助我找到一个错误...我在脚本中从指标缓冲区 复制条形值(BarsCount),然后围绕数值进行循环,检测信号并将其打印到Print();这似乎很简单,但并不那么容易......除了过零线,我得到了所有我想要的信号。 CROSSOVER_OR_REVERSE 也许脚本不应该这样做? 我附上了代码和日志的截图......非常感谢! //+------------------------------------------------------------------+ //| B_O_P_Signals.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ enum enMaTypes { ma_sma, // Simple moving average ma_ema, // Exponential moving average ma_smma, // Smoothed MA ma_lwma // Linear weighted MA }; input int inpSmoothPeriod = 14; // Result smoothing period input enMaTypes inpSmoothMethod = ma_sma; // Result smoothing type input double inpLevelUp = 0.2; // Level up input double inpLevelDown = -0.2; // Level down input int BarsCount = 100; double Mid_line[1] = {0.0}; int handle=0; double TREND_VAL[]; void OnStart() { handle = iCustom(_Symbol,PERIOD_CURRENT,"Balance of Market Power",inpSmoothPeriod,inpSmoothMethod,inpLevelUp,inpLevelDown); CopyBuffer(handle,2,0,BarsCount,TREND_VAL); ArraySetAsSeries(TREND_VAL,true); string Signal =""; for (int i=ArraySize(TREND_VAL)-1; i>=0; i--) { int k=1; if(TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] > Mid_line[0] && TREND_VAL[i] > inpLevelUp) Signal = "TREND_UP"; else if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] > Mid_line[0] && TREND_VAL[i] < inpLevelUp) Signal = "TREND_UP_ROLLBACK_OR_FLAT"; else if(TREND_VAL[i] >= Mid_line[0] && TREND_VAL[i+k] <= Mid_line[0]) Signal ="CROSSOVER_OR_REVERSE_UP"; else if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] < Mid_line[0] && TREND_VAL[i] < inpLevelDown) Signal = "TREND_DN"; else if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] < Mid_line[0] && TREND_VAL[i] > inpLevelDown) Signal = "TREND_DN_ROLLBACK_OR_FLAT"; else if(TREND_VAL[i] < Mid_line[0] && TREND_VAL[i+k] > Mid_line[0]) Signal = "CROSSOVER_OR_REVERSE_DN"; else Signal = "UNKNOWN_SIGNAL"; Print(string(i),"_", Signal); } } //+------------------------------------------------------------------+ 附加的文件: Question.png 150 kb 1...129512961297129812991300130113021303130413051306130713081309...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
弗拉基米尔-卡尔普托夫,还有我?)
我不能确定,但可以试试0.0。
新增: 在MQL5中似乎不能取消'INDICATOR_MINIMUM'和'INDICATOR_MAXIMUM'。
我不能确定,但可以试试0.0。
新增: 似乎'INDICATOR_MINIMUM'和'INDICATOR_MAXIMUM'不能被MQL5取消。
唉......。
谢谢你的答复。
(其实关卡也有同样的问题;但通过设置关卡数量 来解决)。
唉......。
谢谢你的答复。
(关卡的问题实际上是一样的;但通过设置关卡的数量 来解决)
实验,一切都会成功的。
我比较了图表保存的属性(以'随机振荡器'指标为例)。
这显然是一个'bool'类型的属性,但从MQL5语言中无法访问这个属性。
我比较了图表保存的属性(以'随机振荡器'指标为例)。
它显然是一个'bool'类型的属性,但从MQL5中无法访问这个属性。
是的,唉。
再次感谢)
有一个问题。使用该函数(见下文),我们可以通过历史上的头寸ID获得TakeProfit和StopLoss值(即当头寸已经平仓时),该函数在实时中起作用,但在策略测试器中,它无法找到TakeProfit和StopLoss,因为它没有看到设置止损的历史订单(重要的是,这些止损是在开仓后设置的)。
问题:我如何使用策略测试器根据票据找出平仓的TP/Loss?
,我只是想对EA进行编程,我想先写一个统计 传播收集器。
,我的意思是,我希望它能做什么?在测试器中,一个EA启动并收集一定时间段内的tick历史数据,例如10天。
然后它在csv或xlsx文件中生成以下数据:
一段时间的平均点差:服务器上的00:00-09:00,09:00-18:00,18:00-00:00(所有10天),这段时间的最大点差,整个10天内货币对的最小点差和平均点差。
我真的厌倦了手动收集这些数据。
我知道有一些程序可以自己做...但我想拥有自己的,作为一种锻炼。
,也许尊敬的行家可以告诉我从哪里开始?而且,是否有可能写出这样的程序?
,预先感谢所有回复并对一个新人表示同情的人。
大家好。也许有人有现成的代码。有2个参数,存款=3000,手数为0.01,即存款3000手数为0.01,现在严格按翻倍计算,即存款6000手数为0.02,9000手数为0.03,怎么做?
大家好。也许有人有现成的代码。有2个参数,存款=3000,手数为0.01,即存款3000手数为0.01,现在严格按翻倍计算,即存款6000手数为0.02,9000手数为0.03,怎么做?
它大致是这样的。
结果。
好时光。
请帮助我找到一个错误...我在脚本中从指标缓冲区 复制条形值(BarsCount),然后围绕数值进行循环,检测信号并将其打印到Print();这似乎很简单,但并不那么容易......除了过零线,我得到了所有我想要的信号。
CROSSOVER_OR_REVERSE也许脚本不应该这样做? 我附上了代码和日志的截图......非常感谢!