// 在已有的單子獲利300點後把止損設為0這個想法,在編寫上可行不可行?
不是止损设置为0,是止损设置为单子开仓价格。
input int Magic=0; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- TrailStop(300); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void TrailStop(double stopLevel) { bool res=false; double newSL=0.0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && OrderType()<=1) { if(OrderType()==OP_BUY && OrderStopLoss()<OrderOpenPrice() && Bid>OrderOpenPrice()+stopLevel*Point) { ResetLastError(); newSL=OrderOpenPrice(); res=OrderModify(OrderTicket(),OrderOpenPrice(),newSL,OrderTakeProfit(),0,clrBlue); if(!res)Print("Modify Order Error#",GetLastError()); } else if(OrderType()==OP_SELL && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0.0) && Ask<OrderOpenPrice()-stopLevel*Point) { ResetLastError(); newSL=OrderOpenPrice(); res=OrderModify(OrderTicket(),OrderOpenPrice(),newSL,OrderTakeProfit(),0,clrRed); if(!res)Print("Modify Order Error#",GetLastError()); } } } } } //+------------------------------------------------------------------+
Ziheng Zhuang:
做歷史回測的時候OederModify()是不是不啟動的?為什麼OrderModify()寫了下去不啟動的?
don98814462:
做歷史回測的時候OederModify()是不是不啟動的?為什麼OrderModify()寫了下去不啟動的?
做歷史回測的時候OederModify()是不是不啟動的?為什麼OrderModify()寫了下去不啟動的?
历史回测是都可以的。
结果取决于你的参数,参数太小了,要设置的SL过于靠近市价则会导致修改SL失败。
我最近在寫EA,關於單子管理的部分,在編寫上遇到了困難,例如我開了張設了止損300點,獲利是0的單子,想在單子獲利300點後,EA能把止損修改成止損設為0,獲利0,可是在應用OrderModify方面,語法對了EA却沒有照我所寫的運行
在已有的單子獲利300點後把止損設為0這個想法,在編寫上可行不可行?
以下是程式碼
void orderselection2()
{
int rtt;
for(int i=0;i<OrdersTotal()+1;i++)
{int orderselectionsss;
orderselectionsss=OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MYSTO && OrderType()==OP_BUY&&OrderTakeProfit()==OrderOpenPrice()+300*Point)
{
rtt=OrderModify(OrderTicket(),OrderLots(),0,OrderStopLoss()-OrderStopLoss(),0,Green);
}
orderselectionsss=OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MYSTO && OrderType()==OP_SELL
&&OrderTakeProfit()==OrderOpenPrice()-300*Point)
{
rtt=OrderModify(OrderTicket(),OrderLots(),0,OrderStopLoss()-OrderStopLoss(),0,Green);
}
}
}