我需要一个止损对象的功能,包括一个乘数,它在每次调用时(即在每个时间间隔)增加,但在第一次调用之前(即在打开一个位置时)它必须重置为0(重置它在SL对象的末尾是不可能的,因为当SL被击中时将不会调用该对象)。当我尝试使用在SL类之外声明的全局变量时,我得到了编译错误(“缺少声明”;如果信息很重要,则将该类放在包含文件中)。
还有另一种方法,而不是让我的SL对象成为一个函数(可以访问全局变量)吗?
非常感谢!
答案 0 :(得分:1)
int stoplossMultiplier,
lastOpenedTicket;
void OnInit(){
stoplossMultiplier = 0;
lastOpenedTicket = 0; // also possible to find among open
}
int TradeSend(){
// do what you need here, include ticket = OrderSend(); function
// compute lot based on stoplossMultiplier
lastOpenedTicket = ticket;
}
void OnTick(){
if ( lastOpenedTicket > 0 ){
if ( !isTicketExist( lastOpenedTicket() ){
if ( isClosedByStopLoss( lastOpenedTicket() ) ){
stoplossMultiplier = 0;
}else{
stoplossMultiplier++;
}
}
}
}
bool isTicketExist( int ticket ){ /* make sure order is open */ }
bool isClosedByStopLoss( int ticket ){ /* loop over OrdersHistoryTotal() */ }