for( int c=OrdersTotal()-1; c >=0; c-- )
{
if(OrderSelect(c,SELECT_BY_TICKET,MODE_TRADES)==true){
Print("Order Ticker Number = ",OrderTicket());
Print("Order Lots Open = ", OrderLots());
}
elseif(OrderSelect(c,SELECT_BY_TICKET,MODE_TRADES)==false){
Print("Order Select returned the error of ", GetLastError()); // OrderSelect has failed, why do you continue . . .
}
if(OrderMagicNumber()==MagicNumber) // . . . to this line ?if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
if(OpenOrdersThisPair(Symbol())==1)
//if( Bid == FirstTarget_Buy)
for( int c = OrdersTotal()-1; c >= 0; c-- )
{
if( OrderSelect(c, SELECT_BY_TICKET, MODE_TRADES) )
{
Print("Order Ticker Number = ",OrderTicket());
Print("Order Lots Open = ", OrderLots());
}
else
{
Print("Order Select returned the error of ", GetLastError());
continue; // try next order position in the loop
}
if(OrderMagicNumber() == MagicNumber)
if(OrderSymbol() == Symbol())
if(OrderType() == OP_BUY)
if(OpenOrdersThisPair(Symbol()) == 1)
if(OrderSelect(OrdersTotal(),SELECT_BY_TICKET,MODE_TRADES)==true && OpenOrdersThisPair(Symbol())==1){
double FirstTarget_Buy = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 );{
Print("FirstTarget_Buy: ", DoubleToStr( FirstTarget_Buy, Digits ));
}
double minLot = MarketInfo(Symbol(), MODE_MINLOT);{
Print("The minimum lots are: ", DoubleToStr( minLot, Digits ));
}
double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);{
Print("The Lotstep is: ", DoubleToStr( lotStep, Digits ));
}
double half = MathCeil(OrderLots()/2/lotStep)*lotStep;{
Print("The Lots to close is: ", DoubleToStr( half, Digits ));
}
for( int c=OrdersTotal()-1; c >=0; c-- )
{
if(OrderSelect(c,SELECT_BY_TICKET,MODE_TRADES)==true){
Print("Order Ticker Number = ",OrderTicket());
Print("Order Lots Open = ", OrderLots());
}
else{
Print("Order Select returned the error of ", GetLastError()); // Order Select does not seem to want to work?continue;
}
if(OrderMagicNumber()==MagicNumber)
if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
if(OpenOrdersThisPair(Symbol())==1)
bool Close_Half_Order = OrderClose(OrderTicket(),half,FirstTarget_Buy,3,CLR_NONE);
if(Close_Half_Order!=TRUE)Print("Close_Half_Order Last Error = ", GetLastError());
}
}
2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: Order Select returned the error of 0 // Not sure what is going on here?
2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000 // This is the right calculation based
// upon the total lots opened on a pending order - to half.
2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000
2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000
2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931 // This price is also correct.
MathFloor是否将小数位数四舍五入到最接近的整数?
MathFloor() 做了它在文档中所说的事情 . . . "MathFloor函数返回一个数值,代表小于或等于x的最大整数。"
FirstTarget作为 "OrderClose() "中的一个自定义参数是否有意义 - 假设 "sizeClose "是正确的?(见引用的代码)
不 ......你有这个。
当你可能是指这个 ... .
FirstTarget = OrderOpenPrice() + ( ( OrderTakeProfit()-OrderOpenPrice() ) / 2 ) ;
使用括号(和空格)使事情变得清晰和明确。
你的代码没有帮助 - 对不起。
为什么? 它错了吗?
你可以打印自定义变量吗?如果可以,我一定是做错了,因为它没有在日志中显示出来。
是的,你可以打印任何变量 ..你在做什么?
关于打印自定义变量的问题,我如何为 "FirstTarget_Buy "做这件事?
我打算花时间浏览我所有的代码,并打印出很多东西--我知道如何用bools和ints来做(整数-1失败,bool是一个真或假的语句--很简单。),但我不明白当你把函数 分配给一个自定义变量时如何做?
谢谢你对上面的 "FirsTarget "公式的说明!对不起,我的意思是说,你的代码在某种意义上没有帮助,我不明白如何把公式放在一起......我发现这真的很反直觉--你会认为调用 "OrderSelect "会让你简单地看到该tickorder上的手数...然后简单地分割它...
对不起,我就像一个完全的白痴一样!"。
对不起,我觉得自己像个十足的白痴!
一点也不,你只需要找到你的盲点并加以启发,一旦你找到了,你就会想,为什么你会发现它这么难,当你知道如何做时,一切都很容易。
关于打印自定义变量的问题,我如何为 "FirstTarget_Buy "做这件事?
我打算花时间浏览我所有的代码,并打印出很多东西--我知道如何用bools和ints来做(整数-1失败,bool是一个真或假的语句--很简单。),但我不明白当你把函数分配给一个自定义变量时如何做?
我的意思是说,你的代码在某种意义上没有帮助,我不明白如何把公式放在一起......我发现这真的很反直觉--你会认为调用 "OrderSelect "会让你简单地看到该tickorder上的手数是多少......然后简单地分割它......
你可以简单地选择订单,使用OrderLots()并除以2 ......你可以这样做,在许多情况下它会工作。我写的代码是针对我可以预见的所有情况的,这样我就不必在它发生故障时不断地修复它......。
如果你的头寸大小是2.0手,除以2就是1.0手,这就可以了 ......
如果你的仓位大小是0.3手,除以2就是0.15手,如果MODE_LOTSTEP是0.1,这将是一个无效的仓位大小 . . . 你可以使用0.1或0.2而不是0.15,所以你需要编写这个检查和 调整。
你在这里所做的并不是在所有情况下都有效 ... .
啊啊啊!我刚刚花了15-20分钟的时间把打印的东西都打乱了--我开始明白我在哪里出了问题。我基本上是在选择待定的订单......但是,由于它是一个挂单,在我选择它的时候,很有可能OrderLots、止损和目标已经改变,因此我需要把它放在一个循环中,使它与我的挂单在触发前不断计算的方式同步。
那该死的doubletostr :P - 说得对,RaptorUK!我现在可以看到这个计算 是正确的,感谢你的调整 :)
我想我现在知道怎么做了--只是出于好奇,什么 "如果 "语句可以只调用已触发的订单。目前,我在市场订单打开时调用,但我想知道如何在挂单被触发时调用?
下面的代码和相应的 "if "语句似乎只是对未平仓的挂单进行调用。我只是想在订单被触发的基础上,"转到 "一个特定的自定义函数(例如无效)?(如果这有意义的话!)
谢谢你为我解决了这么多问题 :)
啊啊啊!我刚刚花了15-20分钟的时间把印刷品弄得到处都是--我开始明白我的错误所在了。
当你知道如何操作时,就很容易了
我想我现在知道怎么做了--只是出于好奇,什么 "if "语句可以只调用已经触发的订单。目前,当我有一个市场订单打开时,我就会调用它,但我想知道如何在挂单被触发时调用它?
当一个挂单 被触发后,它将成为一个OP_BUY或OP_SELL,所以 . . .
if(OrderType() == OP_BUY || OrderType() == OP_SELL) { }
一个提示,使用更多的空格 ... ... 当你得到一个除以零的错误,你想找到它发生的地方,很容易搜索到空格/ 空间,只是找到你的除数,而不是所有的注释 ... ... 所以我在= + - / %等周围使用空格。
好建议--我会的!谢谢你的帮助:)如果我设法做到了,我会回帖的!
我没有得到任何关于印刷品的信息?日志中完全没有显示。我想这是因为在第一个 "if "语句中,没有选择任何订单类型?从我所看到的代码来看,我认为我至少离得不远...?
好的,我回来了!...但不是很好的消息--我已经尝试并测试了多种变化的代码,但都没有成功。这就是我现在所处的情况。
我没有得到任何关于印刷品的信息?日志中完全没有显示。我想这是因为在第一个 "if "语句中,没有选择任何订单类型?从我所看到的代码来看,我认为我至少离得不远...?
你是如何在这样做之前选择订单的?
if(OrderType() == OP_BUY ){
你在这里仍然有问题
为什么不......。
2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: Order Select returned the error of 0 // Not sure what is going on here? 2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: The Lots to close is: 0.09000 // This is the right calculation based // upon the total lots opened on a pending order - to half. 2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: The Lotstep is: 0.01000 2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: The minimum lots are: 0.01000 2013.07.31 11:13:52 2013.02.01 16:00 trendfishing_play_ground EURUSD,H1: FirstTarget_Buy: 1.37931 // This price is also correct.