MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 194

 
누가 압니까 - 주문의 일부를 닫으면 마법이나 설명이 사라질 것입니까?
 
Renat Akhtyamov :
누가 압니까 - 주문의 일부를 닫으면 마법이나 설명이 사라질 것입니까?

마법은 유지되고 주문 티켓 이 변경되며 #xxxxxxxxx의 상위 주문 티켓이 댓글에 추가됩니다. 하위 티켓은 상위 주문에 추가됩니다: to#xxxxxxxxx

 
Artyom Trishkin :

마법은 유지되고 주문 티켓 이 변경되며 #xxxxxxxxx의 상위 주문 티켓이 댓글에 추가됩니다. 하위 티켓은 상위 주문에 추가됩니다: to#xxxxxxxxx

확인. 고맙습니다!
 
geratdc :


예, 이 K가 상단 헤더의 외부 변수 에도 표시됩니다. 아마도 이것은 일부 함수의 반환 값일 것입니다 ...


Alexey, 내 문제에 대해 무엇을 말할 수 있습니까? 중지 취소 명령을 지키려는 후행. 이것을 만난 적이 있습니까?

그리고 이 문제에 대한 답을 하기 위해서는 문제 자체를 이해해야 합니다. 그리고 이것으로부터

geratdc :

도움이 필요합니다 - 역전 중지 - 3개의 주문이 있지만 비디오 자습서에서 후행하는 예 :) 관련 없는 주문에 대해서만, 그러나 저에게는 알고리즘으로 연결되어 있습니다. 즉, 이익을 취하는 것은 3개의 주문의 합으로 계산됩니다. , 또는 트렌드에 즉시 도달하는 경우 하나입니다. 글쎄, 나는 뭔가를 생각해 냈지만 고문은 더 많이 벌지 않았습니다. 그는 같은 금액을 벌기 시작했지만 후행없이 이전 거래와 비교하여 2-3 배 적은 거래를 얻습니다. 일반적으로 나는 후행이 없지만 일종의 탁도가 있습니다. 관련 주문에 대해 어떻게 할 수 있습니까? 누가 나에게 아이디어를 줄 수 있습니까? 나는 다른 것을 생각해 내지 않을 것입니다. 여기 내 "후행"의 결과가 있습니다. 파란색으로 강조 표시되어 있습니다.

1번 테스트 결과를 첨부합니다. 후행 정지가 있습니까? 이해가 안 됩니다. 같은 기간 이익이 증가하지 않은 이유는 무엇입니까? 그리고 거래건수 만 2~3배 줄었나요?


나는 아무것도 이해할 수 없습니다. 가장 이상한 점은 " 글쎄, 내가 뭔가를 생각해 냈어"인데, 당신이 생각해 낸 것을 이해 했습니까? 그리고 " 연결된 주문에 대해 어떻게 합니까 "가 있습니다. 그래도 ' 아무래도 생각나지 않을 것 같아 '라는 이해가 되는 표현이 있다.

 
Alexey Viktorov :

그리고 이 문제에 대한 답을 하기 위해서는 문제 자체를 이해해야 합니다. 그리고 이것으로부터

나는 아무것도 이해할 수 없습니다. 가장 이상한 점은 " 글쎄, 내가 뭔가를 생각해 냈어"인데, 당신이 생각해 낸 것을 이해 했습니까? 그리고 " 연결된 주문에 대해 어떻게 합니까 "가 있습니다. 그러나 여전히 이해할 수 있는 표현이 있습니다. " 나는 두려워서 다른 생각을 하지 않을 것 입니다."


내가 이해하는 바에 따르면 후행은 주문에 올바르게 적용될 수 없으므로 3개의 모든 주문에 대한 이익의 합계가 동일한 경우 주문이 마감되는 이 CalculateProfit 함수, 즉 "op" 변수를 자세히 살펴보아야 합니다. TakeProfit으로 이동하고 이 변수를 추적해 봅니다. 나는 이 방향으로 뭔가를 생각해내려고 노력할 것이다. 글쎄, 나는 타사 abraKODabras를 탐구하는 것이 어렵다는 것을 이해합니다.)))
 
geratdc :

내가 이해 하는 바에 따르면 후행은 주문에 올바르게 적용될 수 없으므로 3개의 모든 주문에 대한 이익의 합계가 동일한 경우 주문이 마감되는 이 CalculateProfit 함수, 즉 "op" 변수를 자세히 살펴보아야 합니다. TakeProfit으로 이동하고 이 변수를 추적해 봅니다. 나는 이 방향으로 뭔가를 생각해내려고 노력할 것이다. 글쎄, 나는 타사 abraCODabras를 탐구하는 것이 어렵다는 것을 이해합니다)))
왜 신청 안해??? 다른 사람의 기능에 무언가를 붙이거나 발명하는 것이 아니라 자신이 원하는 모든 기능을 수행하는 방식으로 자신의 것을 작성해야 합니다. 글쎄, 무엇이 문제가 될 수 있습니까? 얼마나 많은 주문이 있더라도 평균 가격을 계산하고 그것에서 후행을 시작하십시오 ... 어떤 조건이 충족되면 사이클의 모든 주문을 거치면서 모든 주문의 평균 가격에서 계산되는 새로운 수준으로 중지를 재정렬합니다. 한 방향으로 주문 가능.
 
//+------------------------------------------------------------------+
//|                                     BLACKJACK&HOOKERS TrailX.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern double   Lots           = 0.01 ;
extern double   TakeProfit     = 1 ;
extern int      Step           = 1 ;

extern double   TrailXStep     = 1 ;
extern double   TrailXStop     = 1 ;

extern int      MaPeriod       = 100 ;
extern int      MaShift        = 1 ;

extern int      Magic          = 123 ;
extern int      Slippage       = 5 ;

int timeprev= 0 ;

extern double price,op,cn,tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 )
       //TakeProfit     *= 10;
      Step           *= 10 ;
       //TrailXStep     *= 10;
       //TrailXStop     *= 10;
      Slippage       *= 10 ;

      
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
   if (timeprev == Time [ 0 ]) return ;
   timeprev = Time [ 0 ];
   double maprice= iMA ( Symbol (), 0 ,MaPeriod,MaShift, MODE_SMA , PRICE_CLOSE , 1 ); 
   op=CalculateProfit();
   cn=CountTrades();
   tp=TakeProfit;
   if (tp>TakeProfit)
   {
      TakeProfit+=tp;
   }
   
 

 
   if (cn== 0 && CountBuy() + CountSell() == 0 && Ask > maprice)
   {
       if ( OrderSend ( Symbol (), OP_BUY , Lots, Ask , Slippage, 0 , 0 , "" , Magic, 0 , Blue)< 0 )
             Print ( "Не удалось открыть ордер на покупку" );
            
   }
   
   if (cn== 0 && CountBuy() + CountSell() == 0 && Bid < maprice)
   {
       if ( OrderSend ( Symbol (), OP_SELL , Lots, Bid , Slippage, 0 , 0 , "" , Magic, 0 , Red)< 0 )
             Print ( "Не удалось открыть ордер на продажу" );
            
   }
   

   
   if (cn== 1 && CountBuy()== 1 ) 
   {
      price=FindLastBuyPrice();
       if ((price- Ask )>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red)< 1 )
             Print ( "Не удалось открыть ордер на продажу" );
      }
   }
   else if (cn== 1 && CountSell()== 1 ) 
   {
      price=FindLastSellPrice();
       if (( Bid -price)>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue)< 1 )
             Print ( "Не удалось открыть ордер на покупку" );
      }
   }
   
   
   
   if (cn== 2 && CountBuy()== 1 && CountSell()== 1 ) 
   {
      price=FindLastSellPrice();
       if ((price- Bid )>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red)< 1 )
               Print ( "Не удалось открыть ордер на продажу" );
               
      }
       else 
      price=FindLastSellPrice();
       if (( Bid -price)>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue)< 1 )
             Print ( "Не удалось открыть ордер на покупку" );
           
      }
   }
   else if (cn== 2 && CountSell()== 1 && CountBuy()== 1 ) 
   {
      price=FindLastBuyPrice();
       if (( Ask -price)>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue)< 1 )
               Print ( "Не удалось открыть ордер на продажу" );
               
      }
       else 
      price=FindLastBuyPrice();
       if ((price- Ask )>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red)< 1 )
             Print ( "Не удалось открыть ордер на покупку" );
           
      }
   }
   
   Trailing();

   if (op>=tp)
   {
         CloseAll();    
   }


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }
//---------------------------------------------------------------------------------------
double CalculateProfit()
  {
   double oprofit= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
              {
               oprofit+= OrderProfit ();
              }
           }
        }
     }
   return (oprofit);
  }
//--------------------------------------------------------------------------------------
void CloseAll()
  {
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY )
              {
               if (! OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage))
                   Print ( "Не удалось закрыть ордер на покупку" );
              }
             if ( OrderType ()== OP_SELL )
              {
               if (! OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage))
                   Print ( "Не удалось закрыть ордер на продажу" );
              }
           }
        }
     }
  }
//---------------------------------------------------------------------------------------------------
double FindLastBuyPrice()
  {
   int oldticket,ticket= 0 ;
   double oldopenprice = 0 ;
   for ( int cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
     {
       if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY )
           {
            oldticket= OrderTicket ();
             if (oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice= OrderOpenPrice ();
              }
           }
        }
     }
   return (oldopenprice);
  }
//---------------------------------------------------------------------------------------------------
double FindLastSellPrice()
  {
   int oldticket,ticket= 0 ;
   double oldopenprice = 0 ;
   for ( int cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
     {
       if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL )
           {
            oldticket= OrderTicket ();
             if (oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice= OrderOpenPrice ();
              }
           }
        }
     }
   return (oldopenprice);
  }
//----------------------------------------------------------------------------------------------
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);
  }
//----------------------------------------------------------------------------------------------
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 CountTrades()
{
     int count= 0 ;
     for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
      {  
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
             if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
               if ( OrderType () == OP_BUY || OrderType () == OP_SELL )
                  count++; 
         }
      }
       return (count);
}
//----------------------------------------------------------------------------------+
int FindLastOrderType()
{
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
      {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
             if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
             return ( OrderType ());
         } 
      }
       return (- 1 );
}
//----------------------------------------------------------------------------------+

이것은 이제 CalculateProfit() 함수를 사용하는 후행 옵션입니다. 거래에서 두 후행 옵션 모두 거래 수 및 이익 측면에서 동일한 지표를 갖습니다. 이익이 거의 없습니다. 이제 지표를 고정시킬 것입니다. 변동성과 더 정확한 입력. 같은 지표로 이러한 문제를 해결할 수 있다고 생각합니다. 맞나요? 마지막 5개 막대 또는 이와 유사한 것을 분석한다고 가정해 보겠습니다. 그러한 막대 표시기가 어떻게 불리는지 알려주십시오. 그리고 가장 좋은 기간은 무엇입니까? 하나의 돌로 두 마리의 새를 나타내는 하나의 지표를 어떻게 가질 수 있는지 생각을 공유하십시오. :)

후행 고문 을 여기에서 찾을 수 있는 방법을 볼 수 있습니다.

 
Alexey Viktorov :
왜 신청 안해??? 다른 사람의 기능에 무언가를 붙이거나 발명하는 것이 아니라 자신이 원하는 모든 기능을 수행하는 방식으로 자신의 것을 작성해야 합니다. 글쎄, 무엇이 문제가 될 수 있습니까? 얼마나 많은 주문이 있더라도 평균 가격을 계산하고 그것에서 후행을 시작하십시오 ... 어떤 조건이 충족되면 사이클의 모든 주문을 거치면서 모든 주문의 평균 가격에서 계산되는 새로운 수준으로 중지를 재정렬합니다. 한 방향으로 주문 가능.

저장되었습니다. 감사합니다. 나는 아직도 그런 생각을 할 수 없다. 머리 속에 코드와 함수의 라이브러리가 있어야 하며 비디오 자습서에서 우리가 거기에 있습니다. 그것이 제가 겪었고 지금은 그것을 사용하고 있습니다. 거기에서 당신은 서브 마스터를 보고 나는 당신의 조언을 이행할 것입니다. 그런데 오늘 제가 생각해 낸 것은 트롤처럼 보이나요? 글쎄요, 고문 흔적이 보고서에서 볼 수 있지만 다시 이것이 얼마나 정확한지 모르겠습니다. 잘못된 흔적은 배수 가능성을 높일뿐이므로 이미 값을 찾고 있습니다 테스터 설정에서 어드바이저가 적어도 뭔가를 벌 수 있도록))))) 그러나 실제로는 물론 너무 이르다. 0.9의 확률로 배수, 이런 식))) 그는 아파트를 매우 두려워하고 지표가 지금 약합니다 - 우리는 어리석게도 추세에 합류하고 3 주문이 있고 시장이 갑자기 방향을 바꾸고 하락을 줄 때 - 물을 빼다.
 
geratdc :

저장했습니다. 감사합니다. 나는 아직도 그런 생각을 할 수 없다. 머리 속에 코드와 함수의 라이브러리가 있어야 하며 비디오 자습서에서 우리가 거기에 있습니다. 그것이 제가 겪었고 지금은 그것을 사용하고 있습니다. 거기에서 당신은 서브 마스터를 보고 나는 당신의 조언을 이행할 것입니다. 그런데 오늘 제가 생각해낸 것은 트롤처럼 보이나요? 글쎄요, 고문이 추적하고 있습니다. 이것은 보고서에서 볼 수 있지만, 다시 말하지만 이것이 얼마나 정확한지 모르겠습니다. 잘못된 추적은 배수 가능성을 높일 뿐이므로 이미 값을 찾고 있습니다. ​테스터 설정에서 어드바이저가 최소한 뭔가를 벌 수 있도록))))) 하지만 실제로는 아직 이른 단계입니다. 0.9의 확률로 배수, 이런 식))) 그는 아파트를 매우 두려워하고 지표가 지금 약합니다 - 우리는 어리석게도 추세에 합류하고 3 주문이 있고 시장이 갑자기 방향을 바꾸고 하락을 줄 때 - 물을 빼다.

글쎄, 나는 당신의 교육에 내 진드기를 추가하려고 노력할 것입니다.

보내면 연락드리겠습니다. 포인터의 스냅 샷이 있습니다 ...

한 틱에 한 함수를 5번 호출하는 것이 잘못된 것 같지 않나요? 그러나 그것은 절반의 문제입니다. 이 함수는 모든 주문을 반복합니다. 그리고 이 모든 것을 한 틱에 5번... 그리고 나는 그런 기능을 4개 세었습니다. 모든 주문을 열거하는 주기로 한 주기에 3개의 기능을 더 추가하는 것은 뇌에 부담을 주지 않습니다.

여기 두 가지가 있습니다.

 if (cn== 0 && CountBuy() + CountSell() == 0 && Ask > maprice)
 if (cn== 0 && CountBuy() + CountSell() == 0 && Bid < maprice)
 if (cn== 1 && CountBuy()== 1 )


else if (cn== 1 && CountSell()== 1 ) 
if (cn== 2 && CountBuy()== 1 && CountSell()== 1 ) 


else if (cn== 2 && CountSell()== 1 && CountBuy()== 1 )

이것은

Trailing();


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }


후행도 다가오지 않습니다.

이것을 이해하려면 후행이 무엇인지에 대한 정의를 명확하게 이해해야 합니다. 나는 그대로 기억하지 못하지만 다음과 같은 것입니다. "가능한 손실을 줄이거나 "보장된" 이익을 늘리기 위해 가격에 따라 StopLoss 수준을 이동합니다."


하지만 이것은

 extern double price,op,cn,tp;

EA가 출시되면 어떤 모습인가요? 아마도 4줄... 필요한가요?


그리고 오늘의 마지막 사항은 머리 속에 라이브러리가 필요하지 않다는 것입니다. 문서가 있고 사용할 수 있으면 충분합니다. 나는 여전히 메모리에 대한 모든 iMA(_Symbol, _Period, , ,,,,) 매개변수를 기록할 수 없으며 문서를 본 후에야 추가로 씁니다. 거의 모든 기능이 그렇습니다. 그러나 다행스럽게도 얼마 전에 그들은 많이 절약되지 않는 툴팁을 만들었습니다. 특정 열거형이 어떻게 쓰여졌는지 기억하려고 하지 않습니다. 따라서 매번 문서로 이동해야 합니다.

 

이 확인란의 상태를 확인하는 기능을 알려주시겠습니까?