int start()
{
//----int i = Bars-1;
int cnt;
int tscnt = 0;
int tvcnt = 0;
double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
while(i >=0)
{if(ts < 0.00001) tscnt++;
if(tv < 0.00001) tvcnt++;
i--;
}
Alert("TickSize returned an erroneous value ",tscnt," times.");
Alert("TickValue returned an erroneous value ",tvcnt," times.");
//----return(0);
}
double loss_for_1_lot1 = pips_to_ssl/ ts * tv ;
if( loss_for_1_lot1 == 0.0 )Print(" ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: ", pips_to_ssl,"/",ts,"*",tv);
2013.10.0211:57:192001.02.1216:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - loss_for_1_lot1 = 0.0 || The formula forthisis: 0/0.001*0.0001
double pips_to_ssl=SellStopPrice-sellPrice;
if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice);
2013.10.02 12:08:01 2001.02.12 16:00 Trend Fishing - V1 - Notional Lots USDJPYnb,H1: ERROR - pips_to_ssl = 0 || The formula for this is: 117.249-117.249
double loss_for_1_lot = pips_to_bsl/ ts * tv ;
它不是tv,结果是div 0。它只能是ts。在一个5位数的经纪商,ts可能会打印为0(4位数)。
在我看来,在从其他地方下载历史记录 之前,你从来没有打开那个交易对,从你的经纪人那里获得市场信息。
我很难相信零除数 是由发布的代码产生的。
DomGilberto编译了这个脚本,并将其附在你认为返回零刻度的图表上。
我希望我做的这个视频(40秒左右)能说明我在说什么(因为我不确定我是否说清楚了)。
视频:http://screencast.com/t/uMHY5DpM
你会看到,第一部分,当我把脚本放到实时图表(真实账户)上时,在那个 "名义账户 "上,刻度值和刻度大小返回 "0",我在手数窗口(单位)中说明了这一点。
第二部分是在同一个经纪商那里,但在一个基于手数的饲料上,这一次它返回了一个刻度值和刻度大小。我再次说明,你使用lot.... 进行交易。
因此,关于策略测试器,我不知道为什么它一直在工作,有时却不工作。在我进行回溯测试时,账户也一直连接着(在一个模拟名义上的喂养账户(单位)上)。
我的下一个问题是,如果这是我从名义联储账户得到的典型反应,你能建议我在这种情况下如何纠正我的头寸大小的计算吗? 它对基于手数的喂养来说是完美的......希望这能更好地解释它?
如果你在你的 "测试 "代码中使用不同的代码,那么它能证明什么?
您是否意识到TICKVALUE从现在开始返回当前值 ... ...即使在策略测试运行期间也是如此? 所以对于任何基础货币不是入金货币的货币对,它将是不正确的,您的手数计算将是错误的 ... ...
在你的视频中,你在第一个例子中使用了GBPUSD,然后在第二个例子中使用了GBPJPY。
我认为,如果你将你的脚本连接到GBPUSD正常手数的图表上,你会得到一个tickvalue的值,但是ticksize也会是0。
这是因为你的脚本警报使用的是双数,所以0.00001会打印成0。
使用DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),8)代替。
好的,首先感谢大家的帮助。
这里是 "Gumrai "和 "SDC "的视频,确认了你们两个人要求我做的事情。我已经用你的MQL4别名标记了脚本,这显然与你在这里发布的代码相对应。视频:http://screencast.com/t/kglCd2hCae
在暂停期间,经纪人和相应的饲料没有改变。这也是一个名义上的饲料账户(单位)。
@RaptorUK:是的,我知道TICKVALUE从现在开始返回的是当前值。 我想你的第二部分现在看是有点逻辑的。我对我如何利用tickvalue作为我的名义进货账户的一部分来确保头寸大小正确感到困惑...?
好的,首先感谢大家的帮助。
这里是 "Gumrai "和 "SDC "的视频,确认了你们两个人要求我做的事情。我已经用你的MQL4别名标记了脚本,这显然与你在这里发布的代码相对应。视频:http://screencast.com/t/kglCd2hCae
在暂停期间,经纪人和相应的饲料没有改变。这也是一个名义上的饲料账户(单位)。
@RaptorUK:是的,我知道TICKVALUE从现在开始返回的是当前值。 我想你的第二部分现在看是有点逻辑的。我对我如何利用tickvalue作为我的名义进货账户的一部分来确保头寸大小的正确性感到困惑......?
那些视频很麻烦,对我的屏幕来说太大了。
为什么不直接发布脚本代码和警报结果。
我不知道你在脚本中放了什么,那应该是我建议的代码,但不可能导致 "08"。
使用
@RaptorUK:是的,我知道TICKVALUE从现在开始返回当前值。 我想你的第二部分现在看是有点逻辑的。我对我如何利用tickvalue作为我的名义饲料账户的一部分来确保头寸大小正确感到困惑...?
这些视频很麻烦,对我的屏幕来说太大了。
为什么不直接公布脚本代码和警报结果。
我不知道你在脚本中放了什么,那应该是我建议的代码,但它不可能导致 "08"。
使用
对不起 - 我现在意识到我忘了放 "DoubleToStr",我的错!!
TickSize = 0.00100000
TickValue = 0.00001026
(滴在GBPJPY名义上的饲料)
@SDC 我只是从这里复制了你的代码,并将其放入一个新的脚本。这就是被返回的东西。
在我的代码中的这个区域,我让它打印出公式来分解数学--这发生在买入挂单上......然而代码的这一部分 "pips_to_ssl "是pips到卖出的止损......。这不是用于买入止损挂单....
好了新的更新,我已经玩过了,重复了零除法发生的精确位置。
在我的代码中的这个区域,我让它打印出公式来分解数学 - 这发生在买入待定订单上......然而代码的这一部分 "pips_to_ssl "是卖出止损的点数这不是用于买入止损挂单....
我请你回看我之前的帖子
"注意
如果pips_to_bsl为零,也将导致零。这可能吗?"
bsl或ssl,同样的编码。