在结构中存储值
Store values in struct
我正在尝试将订单的 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
===================================================
看看它是如何重置以前的值的?我怎样才能保留我以前的数据?
更新
我已经编辑了我的代码,现在有了这个:
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 的相同。这是我的问题
首先,请记住结构可以保持float
(double
), long
(int
,short
), enum
和其他 struct
同类。如果你有 string
作为你的 struct
的一个字段,你不能通过引用传递它,你不能复制它,你也可能会遇到意想不到的问题。它可能无法编译,它可能编译但不工作,它可能工作但不正确。
如果还不算太晚,将 struct
更改为 class
并且您对它没有任何限制(实例可能是 POINTER_INVALID
或 NULL
,当然,所以了解类 是必需的)。而且,你不需要开发数组来存储一些实例,CArrayObj
已经存在了。另外,您可以通过传递所需的参数来创建一个新实例。
第二点是逻辑。您能否解释一下您希望这条线如何工作
if(OrderTicketStats.ThisOrderTicket == OrderTicket()) {
在我看来,ThisOrderTicket
是一个string
,在ticketId之前有一些字符,OrderTicket()
是一个整数ticketId。所以你写的条件永远不会是真的。我建议在 struct
中声明 int orderTicket
,删除无用的 string
字段,并通过
初始化
structInstance.orderTicket=OrderTicket()
等
我正在尝试将订单的 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
===================================================
看看它是如何重置以前的值的?我怎样才能保留我以前的数据?
更新
我已经编辑了我的代码,现在有了这个:
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 的相同。这是我的问题
首先,请记住结构可以保持float
(double
), long
(int
,short
), enum
和其他 struct
同类。如果你有 string
作为你的 struct
的一个字段,你不能通过引用传递它,你不能复制它,你也可能会遇到意想不到的问题。它可能无法编译,它可能编译但不工作,它可能工作但不正确。
如果还不算太晚,将 struct
更改为 class
并且您对它没有任何限制(实例可能是 POINTER_INVALID
或 NULL
,当然,所以了解类 是必需的)。而且,你不需要开发数组来存储一些实例,CArrayObj
已经存在了。另外,您可以通过传递所需的参数来创建一个新实例。
第二点是逻辑。您能否解释一下您希望这条线如何工作
if(OrderTicketStats.ThisOrderTicket == OrderTicket()) {
在我看来,ThisOrderTicket
是一个string
,在ticketId之前有一些字符,OrderTicket()
是一个整数ticketId。所以你写的条件永远不会是真的。我建议在 struct
中声明 int orderTicket
,删除无用的 string
字段,并通过
初始化
structInstance.orderTicket=OrderTicket()
等