例如:字符串
bool neutral = OrderClosePrice() == OrderOpenPrice();
我们也许应该这样塑造算法条件的运作。
bool neutral=false;
if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;
和其他两个条件是一样的
顺便说一下,历史上的最后一笔交易并不总是时间上的最后一笔交易。
也许从映射的那个地方开始。
我将暂时从这个函数中删除收集的统计数据,并在另一个函数中进行一般的减法和统计(单独的函数将产生)。
分块写作。
收集统计数据并计算减去和加上(减去和加上是全局变量)。
if(OrderSelect((OrdersHistoryTotal() - 1), SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { if(OrderTicket() != Tiket2) { bool profit1 = false; if(OrderClosePrice() > 0) { profit1 = true; } bool loss1 = false; if(OrderClosePrice() < 0) { loss1 = true; } SumPosOrder = OrderLots(); Tiket2 = OrderTicket(); Print(OrderCloseTime()); if(loss1) { ObchMin = ObchMin + SumPosOrder; Minus++; Sdelok++; } if(profit1) { ObchPlus = ObchPlus + (SumPosOrder * 0.8); } if(profit1 && ObchPlus < ObchMin) { Pobeda++; Sdelok++; } if(profit1 && ObchPlus > ObchMin) { ObchPlus = 0; ObchMin = 0; Pobeda++; Sdelok++; } }
第2块--选择用于计算(或者说选择)比率的变量n
int GetN() { int n = 0; for(int i = OrdersHistoryTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol) { bool profit = false; if(OrderClosePrice() > 0) profit = true; bool loss = false; if(OrderClosePrice() < 0) loss = true; } if(loss) { n++; } if(n >= MartinSteps) { n = 0; break; } if(profit && ObchPlus < ObchMin) { n++; } if(profit && ObchPlus > ObchMin) { n = 0; break; } } Print(n); return n; } double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; } //+------------------------------------------------------------------+
这可能是正确的...
Renat Akhtyamov 收盘价 怎么可能低于零?
如果收盘价高于开盘价,"买入 "订单就处于盈利状态。
这里是买入加码的条件(不包括佣金和互换)。
如果是相反的情况,那就是减分。由于我是为二元期权写的,所以我做的事情有点不同。
if(OrderProfit() > 0)
这可能是正确的?
Natalya Smirnova #:
也许从映射的那个地方开始。
我将暂时从这个函数中删除统计的集合,而在另一个(我将制作的独立函数)中删除总减和统计。
以块为单位的写作
累计减去和加上(减去和加上是全局变量)。
第2块--选择用于计算(或者说选择)比率的变量n
这可能是正确的...
我不想干涉,甚至还没有看完你的代码和提示......
double SelectVolume(int n) { return n == 0 ? Volume1 : n == 1 ? Volume2 : n == 2 ? Volume3 : n == 3 ? Volume4 : n == 4 ? Volume5 : n == 5 ? Volume6 : n == 6 ? Volume7 : n == 7 ? Volume8 : n == 8 ? Volume9 : n == 9 ? Volume10 : Volume1; }
引起了我的注意。在这方面,有一个问题:使用开关运算符不是更容易和更易读吗?
double SelectVolume(int n) { double Volume = 0.0; switch(n) { case 1 : Volume = Volume2; break; case 2 : Volume = Volume3; break; case 3 : Volume = Volume4; break; case 4 : Volume = Volume5; break; case 5 : Volume = Volume6; break; case 6 : Volume = Volume7; break; case 7 : Volume = Volume8; break; case 8 : Volume = Volume9; break; case 9 : Volume = Volume10; break; default : Volume = Volume1; break; } return(Volume); }我认为这更容易阅读和理解。也许它的工作速度也会快一点。
编写代码
任务原本是:
找到最后一个关闭的订单。
检查它是否关闭在正负位置。
计算交易的数量
计算正负交易的数量。
计算赌注的金额。
如果交易是盈利的(并且总的负数=0),那么第1个赌注
如果交易是负数,那么计算负数,第2个赌注
如果是正数,但是负数>0,那么下一个赌注。
但由于某些原因,它不能正确计算投注次数和投注金额...