我们需要添加一个条件,将已成交的订单分成系列
告诉我们的算法或除法原理
Natashe4ka: ... 关闭订单的利润...将数值加到前一个数值上(5;5+5=10;10+5=15)。
而不是算术求和,应该用空格或分号和空格添加到字符串中,以你喜欢的方式为准
如何使一个系列的每一个封闭的利润是一个新的,而不是前一个(5;5;5)??.....
STARIJ:
用空格或分号和空格代替算术求和,将其添加到一个字符串中,以你喜欢的方式为准
用空格或分号和空格代替算术求和,将其添加到一个字符串中,以你喜欢的方式为准
好主意。
或者我们可以把它放在一个数组中。
Natashe4ka:
你可以输入一个全局变量,并在其中写入当前的利润。 在关闭订单后,减去之前的金额,剩下的就是利润,并记住它。
平仓订单的利润被认为是正确的,但在平仓后,它的价值增加到前一个(5;5+5=10;10+5=15)
如何使一个系列的每个平仓利润成为一个新的,而不是前一个(5;5;5)?
在一系列的封闭订单中,可以有买入和卖出,也可以只有买入和卖出的订单。
color ProfitColor;
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Last Profit", OBJPROP_CORNER, 1);
ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!= Symbol()) continue;
if (OrderMagicNumber()!= magic) continue;
if (OrderType()!= op) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Last Profit", OBJPROP_CORNER, 1);
ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!= Symbol()) continue;
if (OrderMagicNumber()!= magic) continue;
if (OrderType()!= op) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
这很复杂,还有什么更简单的吗?
而你能举出的例子,因为你的大脑正在沸腾?
Natashe4ka:
这有点复杂;还有什么更简单的吗?
这有点复杂;还有什么更简单的吗?
不,这不会更容易。你总是计算所有的订单,包括那些在你以前使用LastProfitCL 函数时被计算的订单。而且由于订单越来越多,利润额也随之增加。
我们必须想出一个条件,当新的订单完成时,循环将被打破。
Vitalie Postolache:
我们需要制定一个条件,当新订单用完时,循环将被中断。
有了,这才是正确的思考方式))。
Natashe4ka:
有了,这才是正确的思考方式))。
那么?
条件在哪里?
Renat Akhtyamov:
那么?
条件是什么?
类似这样的事情。
double cnt=0;
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
你必须以某种方式从过去的
cnt 1,2,3 past
cnt 4,5,6 new减去cnt new。
Natashe4ka:
类似这样的事情。
double cnt=0;
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
你必须以某种方式从过去的
cnt 1,2,3 past
cnt 4,5,6 new减去cnt new。
不,我不是指你已经写好的方式。
用文字告诉我--你感兴趣的平仓订单的利润计算方法
例如:
- 当天
- 亏损
- 最后一个订单
还是别的什么?
描述一下这个系列
平仓订单的利润被认为是正确的,但在平仓后,它的价值增加到前一个(5;5+5=10;10+5=15)
如何使一个系列的每个平仓利润成为一个新的,而不是前一个(5;5;5)?
在一系列的封闭订单中,可以有买入和卖出,也可以只有买入和卖出的订单。
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Last Profit", OBJPROP_CORNER, 1);
ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}