初学者的问题 MQL5 MT5 MetaTrader 5 - 页 553 1...546547548549550551552553554555556557558559560...1503 新评论 [删除] 2016.04.03 09:14 #5521 Vitalii Ananev:取代Close[2],将指标值放在第二个柱子上(例如iRSI(.......,2)),取代Close[1],将指标值放在第一个柱子上。而uroven是水平的 价值。其余的,上面已经告诉你了。 谢谢你。 [删除] 2016.04.03 09:39 #5522 你能告诉我是否有人在mt5的图表右侧看到过当天的侧量,对于mt4,我在这里找到了https://www.mql5.com/ru/code/9777。我有两个变种:要么重写其中的变量,要么找一个现成的。或者我不认为订购,,,,,,,,我需要检查一个平衡理论,,,,。我找到一个适用于mt5的作品,在左边画出昨天的轮廓,但有一个重要的缺点,它没有画出 今天的情况。因此,我想从右边的图表模式信息中添加交易时刻发生的情况 Рыночный профиль ( Market Profile) 投票: 62006.10.11Collectorwww.mql5.com Рыночный профиль ( Market Profile) использует альтернативное представление информации как о горизонтальном, так и о вертикальном движении рынка. Maria Baburina 2016.04.03 10:22 #5523 Maria Baburina:先决条件。 ProfitSellDBL在此计算利润=0.01Tral_Start__Upgr等同于一个int类型的外部变量,等于5。Tral_Size__Upgr同样等于4TV--刻度值,=10总价卖出DBL = 0.04 我已经读过了。看到了如果Tral_Start__Upgr、Tral_Size__Upgr和它们的外部变量被定义为double,那么它将如何工作。即当所有东西都是同一类型的时候,没有任何转换和数据损失。其结果是一样的。我哪里做错了? Vladimir Karputov 2016.04.03 10:30 #5524 Maria Baburina: 阅读。看到了如果Tral_Start__Upgr、Tral_Size__Upgr和它们的外部变量被定义为double,那么它将如何工作。即当所有东西都是同一类型的时候,没有任何转换和数据损失。其结果是一样的。我哪里做错了?一个盲人与一个聋子交谈。如果你想让别人来测试,你需要尽可能少的代码,可以在另一台机器上编译和测试。没有代码--没什么可谈的。新增: 使用调试(Debugging)。-预配置-停止点-开始调试-可观察 的表达方式-调用堆栈视图-分步调试-停止、恢复和结束调试-历史调试 Vladimir Karputov 2016.04.03 16:30 #5525 关于交易、自动交易系统和交易策略测试的论坛 虫子、虫子、问题 comp, 2016.04.03 18:21 运行时错误#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 class CLASS { public: double Buffer[]; CLASS( void ) { SetIndexBuffer(0, this.Buffer); } }; CLASS* Class; void OnInit( void ) { Class = new CLASS; delete Class; Class = new CLASS; Class.Buffer[0] = 0; // array out of range delete Class; return; } 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[] ) { return(rates_total); }在四分之一的时候,它工作得很好!在五个人中,它是一个无赖。与四合院相比,这是否是另一个架构上的限制?给我一个关于这个讨论的链接,我自己找不到。 [删除] 2016.04.03 16:53 #5526 我的理解是否正确,你只能在终端本身 第一次调用(不是手动)OnCalculate之后向指标缓冲区 分配任何东西? Vladimir Karputov 2016.04.03 16:58 #5527 comp: 我的理解是否正确,只有在第一次调用终端(非手动)OnCalculate后,才可以向指标缓冲区 分配东西?指标缓冲区可以在调用OnCalculate()后被访问。同时,指标缓冲区本身也应在全局变量区声明。//+------------------------------------------------------------------+ //| Accelerator.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property description "Accelerator/Decelerator" //---- indicator settings #property indicator_separate_window #property indicator_buffers 6 #property indicator_plots 1 #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 Green,Red #property indicator_width1 2 #property indicator_label1 "AC" //--- indicator buffers double ExtACBuffer[]; double ExtColorBuffer[]; double ExtFastBuffer[]; double ExtSlowBuffer[]; double ExtAOBuffer[]; double ExtSMABuffer[]; //--- handles for MAs int ExtFastSMAHandle; int ExtSlowSMAHandle; //--- bars minimum for calculation #define DATA_LIMIT 37 [删除] 2016.04.03 17:27 #5528 我想我找到了我要找的东西,但代码的古老性给出了一个错误如果不是太麻烦的话,请帮我解决......。如果你能帮我把它转到屏幕的右边,那就太好了。 附加的文件: MarketProfile_Virgin_POC.mq5 13 kb [删除] 2016.04.03 17:47 #5529 Karputov Vladimir:在OnCalculate()被调用后,可以访问指标缓冲区。事实证明,你错了。你可以只在终端调用OnCalculate时应用。在这种情况下,MT4的条件更加灵活,因为只需调用OnCalculate一次即可。但在MT5中,每次在SetIndexBuffer之后,你必须等待终端本身对OnCalculate的调用。证明#property strict #property indicator_chart_window #property indicator_buffers 1 #ifdef __MQL5__ #property indicator_plots 1 #endif #ifdef __MQL5__ #define TRUE true #define FALSE false #endif class CLASS { public: double Buffer[]; CLASS( void ) { ::SetIndexBuffer(0, this.Buffer); } #define TIMESERIES(X) \ ::ArraySetAsSeries(X, TRUE); \ Size = ::MathMin(Copy##X(::Symbol(), ::Period(), 0, bars, X), Size); static int FullOnCalculate( void ) { int Spread[]; long RealVolume[]; int Size = INT_MAX; #ifdef __MQL4__ const int bars = ::Bars; #endif #ifdef __MQL5__ const int bars = ::Bars(::Symbol(), ::Period()); #endif TIMESERIES(Spread) TIMESERIES(RealVolume) #ifdef __MQL4__ return(::OnCalculate(Size, 0, Time, Open, High, Low, Close, RealVolume, Volume, Spread)); #endif #ifdef __MQL5__ datetime Time[]; double Open[]; double High[]; double Low[]; double Close[]; long TickVolume[]; TIMESERIES(Time) TIMESERIES(Open) TIMESERIES(High) TIMESERIES(Low) TIMESERIES(Close) TIMESERIES(TickVolume) return(::OnCalculate(Size, 0, Time, Open, High, Low, Close, RealVolume, TickVolume, Spread)); #endif } }; CLASS* Class; bool FirstRunOnCalculate = TRUE; // Необходимо TRUE, т.к. вызов OnCalculate только самим терминалом инициирует индикаторный буфер void OnChartEvent( const int id, const long& lparam, const double& dparam, const string& sparam ) { if (id == CHARTEVENT_CHART_CHANGE) { Print(__FUNCTION__); ::OnDeinit(); ::Class = new CLASS; if (!FirstRunOnCalculate) CLASS::FullOnCalculate(); // Тут будет задница для MT5 (в MT4 - без проблем), т.к. после SetIndexBuffer в MT5 надо дожидаться вызова OnCalculate САМИМ терминалом } return; } void OnDeinit( const int Reason = 0 ) { if (::CheckPointer(::Class) == POINTER_DYNAMIC) delete ::Class; return; } 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[] ) { Print(__FUNCTION__); if (FirstRunOnCalculate) FirstRunOnCalculate = FALSE; if (::CheckPointer(::Class) != POINTER_INVALID) ::Class.Buffer[0] = 0; // array out of range - MT5-ERROR!!! return(rates_total); }在MT4中,该指标的工作没有问题,在MT5中,它将崩溃并出现错误。事实证明,在MT4中,你只需要等待终端对OnCalculate的第一次调用,并对缓冲区做任何你想做的事情,包括使用SetIndexBuffer重新定义它们。但在MT5中,每一次SetIndexBuffer之后,都需要等待终端对OnCalculate的第一次调用。这个功能在任何地方都没有记录。而且它似乎不符合 "初学者 "的定义。我们是否可以预期在MT5中,这种行为将与MT4相同?也就是说,在终端本身第一次调用OnCalculate之后,可以顺利地调用SetIndexBuffer? Vladimir Karputov 2016.04.03 18:28 #5530 comp:事实证明,你错了。你只能在终端本身调用OnCalculate的时候调用它。在这种情况下,在MT4中条件更灵活,因为你只需要调用OnCalculate一次。但在MT5中,每次在SetIndexBuffer之后,你必须等待终端本身对OnCalculate的调用。证明在MT4中,该指标的工作没有问题,在MT5中,它将崩溃并出现错误。事实证明,在MT4中,你只需要等待终端对OnCalculate的第一次调用,然后对缓冲区做任何你想做的事情,包括使用SetIndexBuffer重新定义它们。但在MT5中,每一次SetIndexBuffer之后,都需要等待终端对OnCalculate的第一次调用。这种特殊性在任何地方都没有记载。而且它似乎不符合 "初学者 "的定义。我们是否可以预期在MT5中,这种行为将与MT4相同?也就是说,在终端自己第一次调用OnCalculate之后,就可以顺利调用SetIndexBuffer 了? 不要搞什么口头禅--自然,对OnCalculate的调用意味着终端本身的调用,因为OnCalculate()函数只在自定义指标中被调用,当需要通过计算事件来计算指标值的时候。这通常发生在收到符号的新刻度线时,该指标是为其计算的。该指标不需要附在这个符号的任何价格图表上。 1...546547548549550551552553554555556557558559560...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
取代Close[2],将指标值放在第二个柱子上(例如iRSI(.......,2)),取代Close[1],将指标值放在第一个柱子上。而uroven是水平的 价值。
其余的,上面已经告诉你了。
先决条件。
ProfitSellDBL在此计算
利润=0.01
Tral_Start__Upgr等同于一个int类型的外部变量,等于5。
Tral_Size__Upgr同样等于4
TV--刻度值,=10
总价卖出DBL = 0.04
阅读。看到了如果Tral_Start__Upgr、Tral_Size__Upgr和它们的外部变量被定义为double,那么它将如何工作。即当所有东西都是同一类型的时候,没有任何转换和数据损失。其结果是一样的。我哪里做错了?
一个盲人与一个聋子交谈。如果你想让别人来测试,你需要尽可能少的代码,可以在另一台机器上编译和测试。没有代码--没什么可谈的。
新增: 使用调试(Debugging)。
-预配置
-停止点
-开始调试
-可观察 的表达方式
-调用堆栈视图
-分步调试
-停止、恢复和结束调试
-历史调试
关于交易、自动交易系统和交易策略测试的论坛
虫子、虫子、问题
comp, 2016.04.03 18:21
运行时错误
在四分之一的时候,它工作得很好!在五个人中,它是一个无赖。与四合院相比,这是否是另一个架构上的限制?给我一个关于这个讨论的链接,我自己找不到。
我的理解是否正确,只有在第一次调用终端(非手动)OnCalculate后,才可以向指标缓冲区 分配东西?
指标缓冲区可以在调用OnCalculate()后被访问。同时,指标缓冲区本身也应在全局变量区声明。
我想我找到了我要找的东西,但代码的古老性给出了一个错误
如果不是太麻烦的话,请帮我解决......。
如果你能帮我把它转到屏幕的右边,那就太好了。
在OnCalculate()被调用后,可以访问指标缓冲区。
事实证明,你错了。你可以只在终端调用OnCalculate时应用。在这种情况下,MT4的条件更加灵活,因为只需调用OnCalculate一次即可。但在MT5中,每次在SetIndexBuffer之后,你必须等待终端本身对OnCalculate的调用。证明
在MT4中,该指标的工作没有问题,在MT5中,它将崩溃并出现错误。事实证明,在MT4中,你只需要等待终端对OnCalculate的第一次调用,并对缓冲区做任何你想做的事情,包括使用SetIndexBuffer重新定义它们。但在MT5中,每一次SetIndexBuffer之后,都需要等待终端对OnCalculate的第一次调用。
这个功能在任何地方都没有记录。而且它似乎不符合 "初学者 "的定义。
我们是否可以预期在MT5中,这种行为将与MT4相同?也就是说,在终端本身第一次调用OnCalculate之后,可以顺利地调用SetIndexBuffer?
事实证明,你错了。你只能在终端本身调用OnCalculate的时候调用它。在这种情况下,在MT4中条件更灵活,因为你只需要调用OnCalculate一次。但在MT5中,每次在SetIndexBuffer之后,你必须等待终端本身对OnCalculate的调用。证明
在MT4中,该指标的工作没有问题,在MT5中,它将崩溃并出现错误。事实证明,在MT4中,你只需要等待终端对OnCalculate的第一次调用,然后对缓冲区做任何你想做的事情,包括使用SetIndexBuffer重新定义它们。但在MT5中,每一次SetIndexBuffer之后,都需要等待终端对OnCalculate的第一次调用。
这种特殊性在任何地方都没有记载。而且它似乎不符合 "初学者 "的定义。
我们是否可以预期在MT5中,这种行为将与MT4相同?也就是说,在终端自己第一次调用OnCalculate之后,就可以顺利调用SetIndexBuffer 了?