2017-12-18 4 views
0

이 코드를 사용하여 코드에 buy1 및 sell1 가격의 주문이 있는지 확인하고 있습니다. 어쨌든 일부 명령은 두 번 실행됩니다. 같은 takeprofit으로 미결의 주문이 있는지 확인하기 때문에 발생하지 않아야합니다. 잘못된 것을 볼 수있는 사람은 누구입니까? 반올림 명심하고 표현을 플로트 -mql4 여러 번 주문이 존재하는지 확인하십시오.

bool CheckBuyOrder1(double buy1_tp){ 
for(int i = 0 ; i < OrdersTotal() - 1 ; i++) { 
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
    if(OrderTakeProfit() == buy1_tp && OrderComment() == "buy") 
return(true); 
} 
return(false); 
} 

bool CheckSellOrder1(double sell1_tp){ 
for(int i = 0 ; i < OrdersTotal() - 1 ; i++) { 
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
    if(OrderTakeProfit() == sell1_tp && OrderComment() == "sell") 
return(true); 
} 
return(false); 
} 

int totalOrders = OrdersTotal(); 

void OnTick() 
{ 
if(totalOrders != OrdersTotal()){ 
double vbid = MarketInfo("EURUSD",MODE_BID); 
double bid = NormalizeDouble(vbid, 3); 
double market_buy_tp = bid; 
double buy1= bid + 0.002; 
double buy1_tp= bid + 0.003; 
if(CheckOpenOrders1(market_buy_tp)==false && CheckBuyOrder1(buy1_tp)==false){ 
int ticket9=OrderSend(Symbol(),OP_BUYSTOP,Lots,buy1,MaxSlippage,0,buy1_tp,"buy",16380,0,clrGreen); 
} 

double market_sell_tp = bid; 
double sell1 = bid - 0.003; 
double sell1_tp= bid - 0.004; 
if(CheckOpenOrdersSell1(market_sell_tp)==false && CheckSellOrder1(sell1_tp)==false){ 
int ticket19=OrderSend(Symbol(),OP_SELLSTOP,Lots,sell1,MaxSlippage,0,sell1_tp,"sell",16380,0,clrGreen); 
} 
totalOrders = OrdersTotal(); 
}} 

답변

0

은 때마다 당신은 다른 double와 함께 OrderTakeProfit() 값을 비교하려고합니다.

예. 0.10과 0.10을 0.10으로 비교해야 할 필요가있는 경우 0.10이 0.09 (9) 6 또는 0.10 (0) 4

인 경우 놀랄 수 있습니다. 이러한 이유로 때때로 이러한 주문을 찾지 못할 수도 있습니다.

double o = Point/2; // initialize in OnInit(), declare in global vars 
... 

bool CheckOrderBuy(double tp){ 
    for (int i = OrdersTotal() - 1; i >= 0; i--){ 
     if (!OrderSelect(i, SELECT_BY_POS))continue; 
     if ( fabs(OrderTakeProfit() - tp) < o 
      &&  OrderType()    == OP_BUY 
       ) return true; 
    } 
    return false; 
} 
+0

아 감사합니다! 그래서 모든 double을 정규화해야합니까? – Sander

+0

정상화 될 수도 있지만 주문을 보낼 때만 정상화가 필요하다고 생각합니다. 더 나은 것은 두 개의 double이 tick보다 절반 (tick의 1/10) –