[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 325

 
sergeev :

닫기를 시도하기 전에 OrderSelect를 실행하고 OrderCloseTime을 확인하십시오. 이미 0보다 크면 주문이 마감됩니다.


Select가 있고 OrderCloseTime을 어디에 둘 것인가? Select 후 또는 CloseOrder() 함수에서?

문서에서 보았다. History Select는 없고 Trade만 있습니다. 따라서 이 History Select를 닫는 조건 뒤와 CloseOrder() 앞에 두려고 합니다. 고맙습니다!

 
선택 내부에서 기호 및 마술(있는 경우)에 대한 필터 후, 즉 닫는 시간의 순서를 확인합니다. 0이 아니면(주문이 닫힘) 다시 닫는 것을 금지합니다.
 
FAQ :
선택 내부에서 기호 및 마술(있는 경우)에 대한 필터 후, 즉 닫는 시간의 순서를 확인합니다. 0이 아니면(주문이 닫힘) 다시 닫는 것을 금지합니다.


고맙습니다! 그래서 나는 더 높은 것을 시도 할 것입니다!

여기에 삽입하려고 시도하고 데모에 넣었지만 더 많은 오류와 다른 오류가 발생했습니다. Doki의 다음 코드를 사용하여 스토브에서 먼저 묻습니다.

   if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm= OrderOpenTime ();
     int       ticket= OrderTicket ();
     if (ctm> 0 ) Print ( "Время открытия ордера № " ,ticket, " " ,ctm);
     ctm= OrderCloseTime ();
     if (ctm> 0 ) Print ( "Время закрытия ордера № " ,ticket, " " ,ctm);
    }
   else
     Print ( "OrderSelect() вернул ошибку " , GetLastError ());

Select Trade, 기호별 수표, 매직... 및... 주문 유형 사이에 삽입할 추가 사항은 무엇입니까? 아마도 datetime cmt 및 int 티켓이 시작 부분에 제시되어야 합니까? 그리고 인쇄는 다른 오류를 씁니다.

닫는 조건을 추가합니다.

 if (ctm == 0 ) {CloseOrder( OrderTicket (), OrderLots (),Bid,slip, Yellow ); return ( 0 );} else continue ;

도와주세요, 제발!

 

안녕하세요, 알려주세요

tp와 sl로 바로 주문을 오픈하는 것이 아니라 tp와 sl을 수정하여 주문을 오픈한 후 주문을 오픈해야 합니다.

다음과 같이 했습니다.

티켓=OrderSend(Symbol(),cmd,lots, NormalizeDouble (열기,자리수),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen);
{
주문선택(티켓,SELECT_BY_TICKET);
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue);
리턴(0);

}


나는 무엇을 그리고 왜 이해하지 못한다

오른쪽?

 
RMX13 :

안녕하세요, 알려주세요

tp와 sl로 바로 주문을 오픈하는 것이 아니라 tp와 sl을 수정하여 주문을 오픈한 후 주문을 오픈해야 합니다.

다음과 같이 했습니다.

티켓=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen);
{
주문선택(티켓,SELECT_BY_TICKET);
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue);
리턴(0);

}


나는 무엇을 그리고 왜 이해하지 못한다

오른쪽?



그리고 더 이상 이해가 되지 않습니다! SRC를 사용하여 코드를 제시합니다(위 참조).
 
int orderOpen( int cmd, double open, int stopLossPips, int takeProfitPips, int magicNumber){       
       double sl= 0 , tp= 0 ;
       if (stopLossPips> 0 ){
         stopLossPips = MathMax (stopLossPips, MarketInfo ( Symbol (),MODE_STOPLEVEL)+ 3 *_pipsMultiplyer);
      }
       if (takeProfitPips> 0 ){
         takeProfitPips = MathMax (takeProfitPips, MarketInfo ( Symbol (),MODE_STOPLEVEL)+ 3 *_pipsMultiplyer);
      }
       int ticket=- 1 ;
       if (_doTrade){        
         double lots  = OrderLotSize();
         if (lots>= MarketInfo ( Symbol (), MODE_MINLOT)){          
             //wait context
             if (TradeIsBusy() < 0 ) {
                 return (- 1 ); 
            }
             if (cmd==OP_BUYSTOP || cmd==OP_BUY || cmd==OP_SELLLIMIT){
               RefreshRates ();
               if (cmd==OP_BUY){
                  open=Ask;
               }
               if (stopLossPips> 0 ){
                  sl= NormalizeDouble (open-stopLossPips* Point , Digits );
               }
               if (takeProfitPips> 0 ){
                  tp= NormalizeDouble (open+takeProfitPips* Point , Digits );
               }
               ticket= OrderSend ( Symbol (),cmd,lots, NormalizeDouble (open, Digits ), 5 *_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber, Symbol (), Period ()), 0 , SpringGreen );              
            } else {
               RefreshRates ();
               if (cmd==OP_SELL){
                  open=Bid;
               }
               if (stopLossPips> 0 ){
                  sl= NormalizeDouble (open+stopLossPips* Point , Digits );
               }
               if (takeProfitPips> 0 ){
                  tp= NormalizeDouble (open-takeProfitPips* Point , Digits );
               }
               ticket= OrderSend ( Symbol (),cmd,lots, NormalizeDouble (open, Digits ), 5 *_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber, Symbol (), Period ()), 0 , Red );
            }
우선, 이 조각이 주문을 여는 역할을 합니까?
 
모두 알아냈다
 
borilunad :


고맙습니다! 그래서 나는 더 높은 것을 시도 할 것입니다!

여기에 삽입하려고 시도하고 데모에 넣었지만 더 많은 오류와 다른 오류가 발생했습니다. Doki의 다음 코드를 사용하여 스토브에서 먼저 묻습니다.

Select Trade, 기호별 수표, 매직... 및... 주문 유형 사이에 삽입할 추가 사항은 무엇입니까? 아마도 datetime cmt 및 int 티켓이 시작 부분에 제시되어야 합니까? 그리고 인쇄는 다른 오류를 씁니다.

닫는 조건을 추가합니다.

도와주세요, 제발!


Eeeh, 그들이 말하는 것처럼: "공부 학생" (c)

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--){
   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES){
       if ( OrderSymbol ()!= Symbol ()){ continue ;} // фильтр по символу(если не наш символ, то пропускаем)
       if ( OrderMagicNumber ()!=magik){ continue ;} // фильтр по магику
       if ( OrderCloseTime ()!= 0 ){ continue ;} // фильтр по времени закрытия (если не=0 то ордер уже закрыт)
       if ( OrderType ()<=OP_SELL){ //закрытие для рыночных ордеров
         OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), MarketInfo ( OrderSymbol (),MODE_SPREAD), CLR_NONE );
      } else { // закрытие для отложенных ордеров
         OrderDelete ( OrderTicket ());
      }
   }
}

불필요한 삭제(주석 제거)

 
               ticket= OrderSend ( Symbol (),cmd,lots, NormalizeDouble (open, Digits ), 5 *_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber, Symbol (), Period ()), 0 , Red );
             OrderSelect (ticket,SELECT_BY_TICKET);
             OrderModify ( OrderTicket (), OrderOpenPrice (),sl,tp, 0 );

주문을 열고 손절매를 하고 이익을 얻는 코드

터미널에서 오류 발생: EURUSD,M30: OrderSend 오류 130

EURUSD,M30: OrderModify 기능에 대한 유효하지 않은 티켓

EURUSD,M30: 주문 수정 오류 4051

EURUSD,M30: 주문 보내기가 오류 #4051로 실패했습니다. 입찰:1.23674000 질문:1.23683000 열기:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.001

문제가 무엇인지 제안할 수 있습니까?


 
FAQ :


Eeeh, 그들이 말하는 것처럼 : "공부 학생"(c)

불필요한 삭제(주석 제거)


매우 감사합니다! 나는 평생을 배운다! 일반적으로 공부하는 것이 일하는 것보다 더 재미있습니다. 이제 적응하려고 합니다. 코드의 순서를 변경하고 싶지 않습니다. 나는 언제든지 시장의 행동 변화에 따라 조건을 변경하거나 추가합니다. 좋은 밤 되세요!