我正在尝试在结构中保存订单的OrderProfit,HighestProfit,LowestProfit
我将它定义为全局变量
struct OrderStats {
string ThisOrderTicket;
double CurrentProfit;
double HighestProfit;
double LowestProfit;
};
在我的方法中,我实例化我的结构
// insert order stats into struct
string OrderTicketStatsName = StringConcatenate("OrderTicketStats-", OrderTicket());
string OrderTicketStats = OrderTicketStatsName;
OrderStats OrderTicketStats={};
OrderTicketStats.ThisOrderTicket = OrderTicketStatsName
然后我用
检查以前保存的数据// current profit
if(DEBUG) {
Print("CheckForClose ",OrderTicket(), ":", OrderTypeByName, " : Struct Name is: ", OrderTicketStats.ThisOrderTicket);
Print("CheckForClose ",OrderTicket(), ":", OrderTypeByName, " : Previous OrderProfit is: ", OrderTicketStats.CurrentProfit);
Print("CheckForClose ",OrderTicket(), ":", OrderTypeByName, " : Previous OrderProfit is: ", OrderTicketStats.HighestProfit);
Print("CheckForClose ",OrderTicket(), ":", OrderTypeByName, " : Previous OrderProfit is: ", OrderTicketStats.LowestProfit);
Print("===================================================");
}
最后,我设置了这样的数据
if(OrderTicketStats.ThisOrderTicket == OrderTicket()) {
OrderTicketStats.CurrentProfit=OrderProfit();
// highest profit
if(OrderProfit() > OrderTicketStats.HighestProfit) {
OrderTicketStats.HighestProfit = OrderProfit();
}
// lowest profit
if(OrderProfit() < OrderTicketStats.LowestProfit) {
OrderTicketStats.LowestProfit = OrderProfit();
}
}
这总是产生,
CheckForClose 2:SELL : Struct Name is: OrderTicketStats-2
CheckForClose 2:SELL : Previous CurrentProfit is: 0
CheckForClose 2:SELL : Previous HighestProfit is: 0
CheckForClose 2:SELL : Previous LowestProfit is: 0
===================================================
CheckForClose 2:SELL : CurrentProfit is: -0.24
CheckForClose 2:SELL : HighestProfit is: 0
CheckForClose 2:SELL : LowestProfit is: -0.24
===================================================
了解它如何重置Previous值?我如何才能获得以前的数据?
更新
我已经编辑了我的代码,现在有了这个:
OrderTicketStats = OrderTicket();
OrderStats OrderTicketStats;
if(OrderProfit() > OrderTicketStats.HighestProfit) {
OrderTicketStats.HighestProfit = OrderProfit();
}
if(OrderProfit() < OrderTicketStats.LowestProfit) {
OrderTicketStats.LowestProfit = OrderProfit();
}
我遇到的问题是: 我想保存一笔交易LowProfit,HighProfit,以了解利润极端和订单通过。我同时打开多个订单,然后我查看我的日志以查看其影响。
目前,我看到了这一点:
EURUSD,M15: ===================================================
EURUSD,M15: CheckForClose 1:BUY : OrderTicketStats for: 1
EURUSD,M15: CheckForClose 1:BUY : OrderProfit is: -5.54
EURUSD,M15: CheckForClose 1:BUY : OrderProfit High is: 0
EURUSD,M15: CheckForClose 1:BUY : OrderProfit Low is: -5.54
EURUSD,M15: ===================================================
EURUSD,M15: CheckForClose 3:SELL : OrderTicketStats for: 3
EURUSD,M15: CheckForClose 3:SELL : OrderProfit is: 1.3
EURUSD,M15: CheckForClose 3:SELL : OrderProfit High is: 1.3
EURUSD,M15: CheckForClose 3:SELL : OrderProfit Low is: -5.54
注意交易3的OrderProfit Low与交易1的相同之处<那是我的问题
答案 0 :(得分:0)
首先,请注意结构可以保持float
(double
),long
(int
,short
),{{1和同类的其他enum
。如果您将struct
作为string
的字段,则无法通过引用传递,您无法复制它,并且您也可能会遇到意外问题。它可能无法编译,它可能编译但不工作,它可能工作但不正确。
如果还不算太晚,请将struct
更改为struct
,您对此没有任何限制(当然,实例可能是class
或POINTER_INVALID
需要课程)。此外,您不需要开发数组来存储一些实例,NULL
已经存在。此外,您可以通过传递所需参数来创建新实例。
第二点是关于逻辑。你能否解释一下你如何期待这条生产线的运作?
CArrayObj
在我看来,if(OrderTicketStats.ThisOrderTicket == OrderTicket()) {
是ThisOrderTicket
,在ticketId之前有一些字符,string
是整数ticketId。所以你写的条件永远不会成真。我建议在OrderTicket()
内声明int orderTicket
,将struct
字段删除为无效,并按以下方式初始化
string
等。