- 显示:
- 9791
- 等级:
- 已发布:
- 2020.03.31 18:53
- 已更新:
- 2020.04.07 04:36
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
输入的时候,‘计算价格利润’选项填当前交易的商品目标价,0代表不计算。如图:
首先选择当前图表货币的订单,并累计价格,找到最大最小价格,数订单的数量和仓位等。
int total=OrdersTotal(); int num = 0; double diffs[][2]; ArrayResize(diffs,total); ArrayInitialize(diffs,0.0); //------ for(int i = total - 1; i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==_Symbol) { double price=OrderOpenPrice(); if(OrderType() == OP_BUY) { if(calcoutprice>0 && OrderProfit()) calc_profit_sum+=OrderSwap()+OrderProfit()*(calcoutprice-price)/(Bid - price); if(calcswap) { diffs[num][0] = OrderProfit() ? OrderSwap() * (Bid - price) /OrderProfit() : Ask - Bid; diffs[num][1] = (int)(now-OrderOpenTime())/PeriodSeconds(PERIOD_D1);//iBarShift(_Symbol,PERIOD_D1,(datetime)OrderOpenTime()); } buy_lots +=OrderLots(); value_sum +=OrderLots()*(price-diffs[num][0]); } if(OrderType() == OP_SELL) { if(calcoutprice>0 && OrderProfit()) calc_profit_sum+=OrderSwap()+OrderProfit()*(calcoutprice-price)/(Ask - price); if(calcswap) { diffs[num][0] = OrderProfit() ? OrderSwap() * (Ask - price) /OrderProfit() : Bid-Ask; diffs[num][1] = (int)(now-OrderOpenTime())/PeriodSeconds(PERIOD_D1); } sell_lots +=OrderLots(); value_sum -=OrderLots()*(price-diffs[num][0]); } if(OrderType()<2 && price!=0) { max = MathMax(max,price); min = MathMin(min,price); price_sum += price; comiss_sum += OrderCommission(); num++; } } } for(int i=num-1; i>=0; i--) printf("[%d],%.0f,%f",i,diffs[i][1],diffs[i][0]/_Point);
然后在图表上创建价格对象,用横线显示:
string name_0=_Symbol+"_weight"; string name_1=_Symbol+"_avgp"; string name_2=_Symbol+"_mean"; if(buy_lots!=sell_lots) { double quantity=buy_lots-sell_lots; double avgp=NormalizeDouble(value_sum /quantity,_Digits);// total_lots printf("1:%f,%f,%f",quantity,avgp,comiss_sum/(buy_lots+sell_lots)); if(ObjectFind(0,name_0)<0) { ObjectCreate(0,name_0,OBJ_HLINE,0,0,avgp); ObjectSetInteger(0,name_0,OBJPROP_COLOR,clrGold); ObjectSetInteger(0,name_0,OBJPROP_STYLE,DRAW_SECTION); } else ObjectMove(name_0,0,0,avgp); } else ObjectDelete(0,name_0); if(calc_profit_sum!=0) printf("price %f %s's profit:%f",calcoutprice,_Symbol,calc_profit_sum);
上面(订单量和价格累积)需要考虑到并非完全锁仓的情况,即(buy_lots!=sell_lots)。
一般当价格在这条线上(空单在下)你当前交易的货币就是盈利了。
当前原油的保本价格就是黄色的那条虚线,并考虑到了仓息(由于我只开了一单,这里没显示其他订单),显示如下:
“calc_profit_sum ”这个通过当前订单的利润和价差来累加到目标价的利润或者亏损。
信息打印在"EA"选项中,如下图:
首先显示的是:1:综合仓位,累积仓位的平均价格(保本价格),平均的手续费。(RETAIL_NETTING_MONEY WTI,M5: 1:0.100000,21.620000,0.000000)
然后显示了当价格在25时,当前symbol的盈利。(RETAIL_NETTING_MONEY WTI,M5: price 25.000000 WTI's profit:338.000000)
当然你也可以在‘计算价格利润’填15,显示那时的亏损。
最后显示的是:2:订单数,价格平均值,价格中值。( RETAIL_NETTING_MONEY WTI,M5: 2:1,21.580000,21.580000)
然后创建开单价格中值和平均值对象,分别显示绿线和白线:
if(num > 0) { double avgp=NormalizeDouble(price_sum / num,_Digits); double mean=NormalizeDouble((max + min) / 2.0,_Digits); printf("2:%d,%f,%f,",num,avgp,mean); if(ObjectFind(0,name_1)<0) { ObjectCreate(0,name_1,OBJ_HLINE,0,0,avgp); ObjectSetInteger(0,name_1,OBJPROP_COLOR,clrLime); ObjectSetInteger(0,name_1,OBJPROP_STYLE,DRAW_SECTION); } else ObjectMove(name_1,0,0,avgp); if(ObjectFind(0,name_2)<0) { ObjectCreate(0,name_2,OBJ_HLINE,0,0,mean); ObjectSetInteger(0,name_2,OBJPROP_COLOR,clrSnow); ObjectSetInteger(0,name_2,OBJPROP_STYLE,DRAW_SECTION); } else ObjectMove(name_2,0,0,mean); } else { ObjectDelete(0,name_1); ObjectDelete(0,name_2); }

该指标用于自定义标识交易品种标准的交易时间段,以此来区分分析标准交易时间段与非标准时间段的行情演变。比如看CHINAA50或者SPX500,分别将其在中国或者美国交易时间段标识出来,以便盘后分析。

根据K线中得长影线,进行反向操作

最近由于各种因素浮动点差有些扩大,该指标可以显示当前价格最近的点差变化,你可以在点差较小的时候进行交易以减少交易成本。

MT4跨周期均线指标,在当前图表上显示大周期的均线,比如在M30上显示日线的均线。