복구하려면 EA를 코딩해야 합니다. 정전, OS 충돌, 터미널 또는 차트가 실수로 닫히면 다음 틱에서 모든 정적/전역 티켓 변수가 손실됩니다. 당신은 미결 주문을 가지고 있을 것이지만 그것을 알지 못하기 때문에 EA는 결코 그것을 청산하거나 SL 등을 추적하지 않을 것입니다. 당신은 어떻게 회복할 것입니까? OrderSelect 루프 를 사용하여 필요한 티켓 번호를 복구하거나 영구 저장(GV/파일)하십시오.
WHRoeder :
복구하려면 EA를 코딩해야 합니다. 정전, OS 충돌, 터미널 또는 차트가 실수로 닫히면 다음 틱에서 모든 정적/전역 티켓 변수가 손실됩니다. 당신은 미결 주문을 가지고 있을 것이지만 그것을 알지 못하기 때문에 EA는 결코 그것을 청산하거나 SL 등을 추적하지 않을 것입니다. 당신은 어떻게 회복할 것입니까? OrderSelect 루프 를 사용하여 필요한 티켓 번호를 복구하거나 영구 저장(GV/파일)하십시오.
복구하려면 EA를 코딩해야 합니다. 정전, OS 충돌, 터미널 또는 차트가 실수로 닫히면 다음 틱에서 모든 정적/전역 티켓 변수가 손실됩니다. 당신은 미결 주문을 가지고 있을 것이지만 그것을 알지 못하기 때문에 EA는 결코 그것을 청산하거나 SL 등을 추적하지 않을 것입니다. 당신은 어떻게 회복할 것입니까? OrderSelect 루프 를 사용하여 필요한 티켓 번호를 복구하거나 영구 저장(GV/파일)하십시오.
안녕하세요, 다음과 같은 방식으로 코드를 변경하도록 추가했습니다.
//---------------------- Buy/Sell function (limit orders) int BuyCall( double BC) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET) == true) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } }
여전히 각 틱에서 동일한 주문을 여러 번 받습니다.
또한 "!"를 제거하면 서명하면 거래를하지 않습니다.
마지막으로 내 주요 기능에서 buyticket 및 Sellticket 확인을 제거해야 합니까?
고맙습니다
if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true)
동영상 재생게시물을 수정 하세요.
많은 양의 코드는 첨부하십시오.- 당신은 if( (2+2 == 4) == true) 를 쓰지 않을 것입니까? if(2+2 == 4) 이면 충분합니다. 따라서 if(bool == true) 를 작성하지 말고 if(bool) 또는 if( ! bool) 만 사용하십시오. bool isLongEnabled와 같은 의미 있는 변수 이름을 사용하면 코드가 자체 문서화됩니다. Long_Entry는 트리거 가격이나 티켓 번호처럼 들리고 "if long entry"는 불완전한 문장입니다.
- BuyTicket 이 마감되었는지 어디에서 확인합니까? 티켓으로 선택하는 것은 항상 true입니다(유효한 티켓 번호가 제공됨).
- OrderSelect 루프에 대한 내 제안을 완전히 무시했습니다.
안녕하세요 WHReder님 답변 감사합니다.
예, SRC 코드에 추가했습니다. 하지만 편집할 때 표시되지 않았습니다.
나는 당신이 제안한대로 == true 용어를 제거했습니다.
오해하지 마십시오. 이 orderselect 루프를 이해하는 데 약점이 있습니다. 나는 무시하지 않았다. 추가하려고 했지만 너무 복잡해서 16개의 오류와 2개의 경고가 표시됩니다. 그 코드에서 MN.Count는 무엇입니까?
// extern int Magic.Number.Base = ... // int magic.number.max; // Export to OpenOrder/MySelect // string market.pair; // Export to OpenOrder/MySelect // int init(){ // market.pair = Symbol(); // magic.number.max = Magic.Number.Base + MN.COUNT - 1;
구매 티켓 확인에 대해 마감되었습니다. 나는 그것을 확인하지 않았으므로 현재 가격이 buystoploss 아래인지 확인한 다음 구매 거래가 마감되었습니다. 그래서 열린 판매 주문 .
Bid < BuyStopLoss
문안 인사
코드를 이런 식으로 정렬합니다. 하지만 지금 2개의 오류가 표시됩니다. "Myselect" & "MyOrdersTotal"은 전역 범위에서만 지울 수 있습니다.
int BuyCall( double BC) { //-----------code bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){ if (! OrderSelect (iWhat, eSelect, ePool) ) return ( false ); int mn = OrderMagicNumber(); if (mn < MNB1 ) return ( false ); if (mn > MNB2 ) return ( false ); if (OrderSymbol() != Pair ) return ( false ); if (ePool != MODE_HISTORY ) return ( true ); return (OrderType() <= OP_SELL); } int MyOrdersTotal( int op=- 1 , int ePool=MODE_TRADES){ #define OP_ALL - 1 if (ePool == MODE_TRADES) iPos = OrdersTotal () - 1 ; else iPos = OrdersHistoryTotal() - 1 ; for (nOrders= 0 ; iPos >= 0 ; iPos--) if ( MySelect(iPos, SELECT_BY_POS, ePool)) if ( op == OP_ALL || op == OrderType() ) nOrders++; return (nOrders); } if (! OrderSelect (BuyTicket, SELECT_BY_TICKET)) { if ( BuyTicket == 0 ) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend ( Symbol (),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit, "Buy limit Order" ,MagicNumber,expiration,Green); SellTicket = 0 ; // counter trade// if ( Bid < BuyStopLoss && SellTicket == 0 ) { if (! OrderSelect (SellTicket, SELECT_BY_TICKET)) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend ( Symbol (),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit, "Sell Order" ,MagicNumber, 0 ,Red); BuyTicket = 0 ; } } } } return (BuyTicket); }
안녕하세요, 저는 Ea를 만들었지만 다시 테스트할 때 각 틱에서 동일한 보류 주문을 많이 생성합니다. 그것을 막는 방법. 한 번에 하나의 주문만 필요하고 사본은 필요하지 않습니다.
이 EA를 " open price only "로 시간별 차트에서 실행하면 복사본이 생성되지 않습니다.
또한 내 ea는 구매 한도가 실패하면 역전 거래 옵션이 있습니다. 그러면 판매 거래가 열립니다. 제가 제대로 설정했는지 아닌지도 알려주세요. 도움을 주시면 감사하겠습니다.
시간 내 주셔서 감사합니다.