我想将Pine脚本“翻译”为MQL4,但是与Trading-view中的Pine-Script相比,我在MQL4中得到了错误的输出。
我用Pine-Script编写了指标,因为这样做似乎很容易。 得到想要的结果后,我缩短了Pine脚本。 这是有效的Pine脚本:
// Pinescript - whole Code to recreate the Indicator
study( "Volume RSI", shorttitle = "VoRSI" )
periode = input( 3, title = "Periode", minval = 1 )
VoRSI = rsi( volume, periode )
plot( VoRSI, color = #000000, linewidth = 2 )
现在,我想将该代码转换为MQL4,但我不断获得不同的输出。
这是我到目前为止编写的MQL4代码:
// MQL4 Code
input int InpRSIPeriod = 3; // RSI Period
double sumn = 0.0;
double sump = 0.0;
double VoRSI = 0.0;
int i = 0;
void OnTick() {
for ( i; i < InpRSIPeriod; i++ ) {
// Check if the Volume is buy or sell
double close = iClose( Symbol(), 0, i );
double old_close = iClose( Symbol(), 0, i + 1 );
if ( close - old_close < 0 )
{
// If the Volume is positive, add it up to the positive sum "sump"
sump = sump + iVolume( Symbol(), 0, i + 1 );
}
else
{
// If the Volume is negative, add it up to the negative sum "sumn"
sumn = sumn + iVolume( Symbol(), 0, i + 1 );
}
}
// Get the MA of the sump and sumn for the Input Period
double Volume_p = sump / InpRSIPeriod;
double Volume_n = sumn / InpRSIPeriod;
// Calculate the RSI for the Volume
VoRSI = 100 - 100 / ( 1 + Volume_p / Volume_n );
// Print Volume RSI for comparison with Tradingview
Print( VoRSI );
// Reset the Variables for the next "OnTick" Event
i = 0;
sumn = 0;
sump = 0;
}
我已经检查了“周期”,“符号”和时间范围是否相同,以及是否具有不同输出的屏幕截图。
我已经尝试按照pine脚本中的rsi,max,rma和sma函数的功能解释进行操作,但是我无法获得任何似乎在运行一半的结果。
我希望将Pine脚本转换为MQL4。
我不想在图表中绘制整个交易量RSI作为指标。 我只想计算上一个整个周期的“体积RSI”值(当打开新的Candel时),以检查其是否高于80。 之后,我想检查一下它何时再次回到80以下,并以此为阈值,以决定是否应该进行交易。
我想要一个简单的函数,将“期间”作为输入并采用当前对和“时间范围”来返回0到100之间的期望值。 到目前为止,我的翻译仍然坚持提供错误的输出值。
我在计算中缺少什么?谁能告诉我用MQL4计算我的Tradingview-Indicator的正确方法是什么?
答案 0 :(得分:0)
Q :有人可以告诉我使用MQL4计算我的Tradingview-Indicator的正确方法是什么吗?
您对目标的主要关注是将代码放入错误的MQL4代码类型中。 MetaTrader Terminal可以通过 Custom Indicator
类型的MQL4代码放置一个指标。
您必须声明一个所谓的IndicatorBuffer(s),其中包含所述指标的预先计算的值,并且这些缓冲区分别映射到指标行(取决于GUI表示样式的类型-行,区域-在线之间等)。
如果您坚持要少用Custom-Indicator
的指示器(这在某些用例中是很合法的,并且是必需的),则您需要实现自己的“机械化”绘制线到单独的子窗口中 Expert-Advisor
代码中的GUI,您将在其中管理所有设置并按需“手动”逐段绘制(我们在原型制作过程中出于许多原因使用了此功能,因此以免在复杂的交易外系统集成过程中避免所有Custom-Indicator
依赖关系和调用接口的坚韧不拔-因此,非常确定这样做的可行性和性能优势以及成本)。
由您决定,MQL4可以采用任何一种方式。
Q :我在计算中缺少什么?
奖励部分::用于提高性能 ...
的隐藏宝石
通过Custom-Indicator
类型的MQL4代码或Expert-Advisor
类型的MQL4代码中的一种,可以避免每次按QUOTE到达重新计算RSI的整个“深度”。指标行有一个冻结的部分和一个热端,从性能角度来看,保留static
个“旧”和冻结数据记录并仅更新“实时”热点是明智的-指标线的末端。这样可以节省您的GUI从任何实时响应循环中消耗的大量响应延迟...