초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 176

 

얘들 아, 고문을 수정하는 데 도움이됩니다. 그는 주문을 확인하는 대신 보증금 전액을 사용할 때까지 첫 번째 신호에서 논스톱으로 매수합니다. 모두 미리 감사드립니다

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
extern double Lots            = 1 ;
extern int     TakeProfit      = 300 ;
extern int     StopLoss        = 50 ;
extern int     Magic           = 111 ;
extern int     Slippage        = 3 ;
//+------------------------------------------------------------------+
extern string TMA             = "Параметры индикатора TMA" ;
extern string TimeFrame       = "current time frame" ;
extern int     HalfLength      = 56 ;
extern int     Price           = PRICE_CLOSE ;
extern double ATRMultiplier   = 2.0 ;
extern int     ATRPeriod       = 100 ;
extern bool    Interpolate     = true ;
//+------------------------------------------------------------------+
double PriceHigh,PriceLow,SL,TP,OrderMagicNumber;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 )
     {
      TakeProfit *= 10 ;
      StopLoss   *= 10 ;
      Slippage   *= 10 ;
     }
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   PriceHigh= iCustom ( NULL , 0 , "TMA_Fair" ,TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate, 1 , 0 );
   PriceLow = iCustom ( NULL , 0 , "TMA_Fair" ,TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate, 2 , 0 );

   if (CountSell()== 0 && Bid>=PriceHigh)
     {
      ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , "ТМА" ,Magic, 0 ,Red);
       if (ticket> 0 )
        {
         SL = NormalizeDouble (Bid + StopLoss* Point , Digits );
         TP = NormalizeDouble (Bid - TakeProfit* Point , Digits );
         if ( OrderSelect (ticket,SELECT_BY_TICKET))
             if (!OrderModify(ticket,OrderOpenPrice(),SL,TP, 0 ))
               Print ( "Ошибка модификации ордера на продажу" );
        }
       else Print ( "Ошибка открытия ордера на продажу" );
     }
   if (CountBuy()== 0 && Ask<=PriceLow)
     {
      ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , "ТМА" ,Magic, 0 ,Blue);
       if (ticket> 0 )
        {
         TP = NormalizeDouble (Ask + TakeProfit* Point , Digits );
         SL = NormalizeDouble (Ask - StopLoss* Point , Digits );
         if ( OrderSelect (ticket,SELECT_BY_TICKET))
             if (!OrderModify(ticket,OrderOpenPrice(),SL,TP, 0 ))
               Print ( "Ошибка модификации ордера на покупку" );
        }
       else Print ( "Ошибка открытия ордера на покупку" );
     }
   if (Ask<=PriceLow && CountSell()> 0 )
     {
       for ( int i= OrdersTotal () - 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           {
             if (OrderMagicNumber()==Magic && OrderType()==OP_SELL)
               if (!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black))
                   Print ( "Ошибка закрытия ордера на продажу" );
           }
        }
     }
   if (Bid>=PriceHigh && CountBuy()> 0 )
     {
       for (i= OrdersTotal () - 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           {
             if (OrderMagicNumber()==Magic && OrderType()==OP_BUY)
               if (!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black))
                   Print ( "Ошибка закрытия ордера на покупку" );
           }
        }
     }
  }
//+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber && Magic && OrderType()==OP_SELL)
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber && Magic && OrderType()==OP_BUY)
            count++;
        }
     }
//+------------------------------------------------------------------+
 
Zelimhannahal00 :

얘들 아, 고문을 수정하는 데 도움이됩니다. 그는 주문을 확인하는 대신 보증금 전액을 사용할 때까지 첫 번째 신호에서 논스톱으로 매수합니다. 모두 미리 감사드립니다

코드 스타일러 를 사용하여 코드 편집기에서 바로 코드 형식을 지정할 수 있습니다. Ctrl + <

나는 당신을 위해 그것을 포맷했습니다 - 이제 그것은 일반적으로 읽을 수 있습니다.

 
Zelimhannahal00 :

얘들 아, 고문을 수정하는 데 도움이됩니다. 그는 주문을 확인하는 대신 보증금 전액을 사용할 때까지 첫 번째 신호에서 논스톱으로 매수합니다. 모두 미리 감사드립니다

위치 확인 기능에서 오류를 올바르게 식별했습니다.

 //+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
       if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_SELL)
            count++;
        }
     }

   return (count);
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
       if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_BUY)
            count++;
        }
     }
//+----------------------

빨간색으로 강조 표시됨, 수정됨

이 같은.

 
Alekseu Fedotov :

위치 확인 기능에서 오류를 올바르게 식별했습니다.

빨간색으로 강조 표시됨, 수정됨

이 같은.

수정했지만 여전히 동일합니다. 문제는 여전히 관련이 있습니다.
 
Zelimhannahal00 :
수정했지만 여전히 동일합니다. 문제는 여전히 관련이 있습니다.
 //+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_SELL)
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_BUY)
            count++;
        }
     }
return (count);


코드를 모두 복사했습니까?

 
Vladislav Andruschenko :


코드를 모두 복사했습니까?

실수로 모든 코드를 복사하지 않았습니다. 모든 것이 정상입니다. return(count);

}

예상대로 코드는 이렇게 끝납니다. 컴파일할 때 오류나 경고가 전혀 없습니다. 내가 실수를 한 기능에서 하이킹, 나는 정확히 어디인지 이해할 수 없습니다. 위에서 제안한 대로 수정했습니다. 또한 오류는 없지만 어드바이저 자체는 동일한 방식으로 작동합니다(첫 번째 신호에서 지정된 로트에서 전체 보증금에 대해 구매합니다. 예를 들어, 1로트를 설정하고 200개 이상의 트랜잭션 1로트를 구매합니다. 보증금이 충분하면 신호가 올바르게 전달되고 올바르게 구매합니다.

 
Zelimhannahal00 :

실수로 모든 코드를 복사하지 않았습니다. 모든 것이 정상입니다. return(count);

}

예상대로 코드는 이렇게 끝납니다. 컴파일할 때 오류나 경고가 전혀 없습니다. 내가 실수를 한 기능에서 하이킹, 나는 정확히 어디인지 이해할 수 없습니다. 위에서 제안한 대로 수정했습니다. 또한 오류는 없지만 어드바이저 자체는 동일한 방식으로 작동합니다(첫 번째 신호에서 지정된 로트에서 전체 보증금에 대해 구매합니다. 예를 들어, 1로트를 설정하고 200개 이상의 트랜잭션 1로트를 구매합니다. 보증금이 충분하면 신호가 올바르게 전달되고 올바르게 구매합니다.

확인, 수정, 작동합니다.

파일:
ProjectName.mq4  11 kb
 
날짜 사이의 초 수를 찾는 방법은 무엇입니까?
 
Alexander Fedosov :
날짜 사이의 초 수를 찾는 방법은 무엇입니까?

TF가 동기화된 경우 CopyXXXX() 함수:

필요한 시간 간격의 시작 날짜와 종료 날짜로 호출

정수 복사 시간 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    날짜 시간           start_time , // 어떤 날짜부터
    날짜 시간           stop_time , // 날짜
    날짜 시간           time_array[]       // 오픈 시간을 복사할 배열
);

반환 값

복사된 배열 요소 의 수 또는 오류의 경우 -1입니다.


iBarShift()를 사용하여 시간별로 2개의 막대를 찾을 수 있습니다.


 
Igor Makanu :

TF가 동기화된 경우 CopyXXXX() 함수:

필요한 시간 간격의 시작 날짜와 종료 날짜로 호출

정수 복사 시간 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    날짜 시간           start_time , // 어떤 날짜부터
    날짜 시간           stop_time , // 날짜
    날짜 시간           time_array[]       // 오픈 시간을 복사할 배열
);

반환 값

복사된 배열 요소 의 수 또는 오류 시 -1입니다.


이상합니다. 이전에 MT4에 이러한 기능이 있었는지 기억나지 않습니다. 5개를 추가했나요?