//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int TotalPos=-1; voidOnTick() { // остальной код
//-- if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderType()<=1) { History();
... } }}} TotalPos=OrdersTotal(); // запомним количество
//-- }
//+------------------------------------------------------------------+ //| Create Object istory | //+------------------------------------------------------------------+ void History() { string Ticket=(string)OrderTicket(); color col=Red; if(OrderType()==0)col=Blue; datetime a=OrderOpenTime(); double b=OrderOpenPrice(); datetime c=OrderCloseTime(); double d=OrderClosePrice(); double prSep=OrderProfit()+OrderCommission()+OrderSwap(); double prAll=0; int cn=0; string hTicket; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderType()<=1) { datetime ct=OrderCloseTime(); // 60 секунд разницы между закрытием первой и последней в сетке if(c<=ct+60 && c>=ct-60) { prAll+=OrderProfit()+OrderCommission()+OrderSwap(); hTicket=(string)OrderTicket(); cn++; } }}} ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b); ObjectSet(Ticket+"Open",OBJPROP_COLOR,col); ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
价格标签(OBJ_ARROW_LEFT_PRICE)能否有自己的文字,而不是价格,如果是这样,怎么做?
而在这个程序中,只有另一个DTZ有一个来自蜡烛的阴影(蜡烛在右边最外面)。
日安!谁能解释一下为什么H4和M15图表上的价格不一致?在M15的截图中,价格已经越过了红线(在垂直线 的左边)。而一分钟后,有一张H4的截图,价格仍然离它很远(在线的右边)。
而这里是该程序的截图,但另一个DTZ有一个蜡烛的影子(蜡烛在右边最外面)。
尝试写一些类似的东西:IceFX DrawProfit
代码。
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
History();
}
}
void History()
{
string Ticket=IntegerToString(OrderTicket());
color col=Red;
if(OrderType()==0)col=Blue;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double profit=OrderProfit();
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);
}
一切正常,但我正在使用一个网格顾问,目前覆盖了一堆订单,结果利润是相互重叠的,我希望这个封闭的一堆利润被合计,只显示金额(如IceFX DrawProfit 指标实现),而不是像现在这样为每个订单分别显示。帮助我把它变成正确的 :)
不同经纪公司的报价是不同的,这对你来说是不是很新鲜?是的,即使是在同一家经纪公司的模拟交易和真实交易,它们也是不同的。真令人惊讶(。
尝试写一些类似的东西:IceFX DrawProfit
代码。
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
History();
}
}
void History()
{
string Ticket=IntegerToString(OrderTicket());
color col=Red;
if(OrderType()==0)col=Blue;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double profit=OrderProfit();
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);
}
一切正常,但我正在使用一个网格顾问,目前覆盖了一堆订单,结果利润是相互重叠的,我希望这个封闭的一堆利润被合计,只显示金额(如IceFX DrawProfit 指标实现),而不是像现在这样为每个订单分别显示。帮助我把它变成正确的 :)
在一个单独的周期内计算利润
是哪一个呢?我如何确定特定的订单是一个组,它们的利润应该被加总?
你如何关闭它们,它们是通过一个函数还是其他方式作为一个组来关闭?
订单由机器人造网者打开,为整个集团计算并设置一个共同的TP,然后将其关闭。
它是这样的。
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int TotalPos=-1;
void OnTick()
{
// остальной код
//--
if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
History();
...
//--}
}}} TotalPos=OrdersTotal(); // запомним количество
}
//+------------------------------------------------------------------+
//| Create Object istory |
//+------------------------------------------------------------------+
void History() {
string Ticket=(string)OrderTicket();
color col=Red;
if(OrderType()==0)col=Blue;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double prSep=OrderProfit()+OrderCommission()+OrderSwap();
double prAll=0;
int cn=0;
string hTicket;
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
datetime ct=OrderCloseTime();
// 60 секунд разницы между закрытием первой и последней в сетке
if(c<=ct+60 && c>=ct-60) {
prAll+=OrderProfit()+OrderCommission()+OrderSwap();
hTicket=(string)OrderTicket();
cn++;
}
}}}
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
Ticket=cn>1?hTicket:Ticket;
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0);
ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10,"Arial",/*White*/clrBlack);
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d);
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2);
}