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

 
hoz :


글쎄, 나는 fi_Ticket 매개 변수가 필요하지 않다는 것을 의미하지 않았지만 기본적으로 값이 0 (영)으로 할당 된 이유는 무엇입니까? 나는 이것을 할 것입니다 :

소스 코드를 다시 복제하겠습니다.

이 기능을 사용하면 상품(예: 주문을 열기 전에 주문 참조 없이) 및 동일한 상품에 대한 거래 정보를 받을 수 있지만 특정 주문과 함께(함께 제공되는 경우) 관련 정보를 받을 수 있습니다. 함수의 편의를 위해 기본값을 사용합니다. 거래 작업 라이브러리를 초기화할 때 음수 fi_Ticket 값이 사용됩니다.

PS 그리고 우선 변수의 이름이나 접두어에 주의를 기울이십시오. bs_Symbol과 같이 b 로 시작하는 변수는 라이브러리의 전역 수준에서 선언됩니다. 대부분의 전역 변수 는 b-PSI@Base에서 선언됩니다.

 

어드바이저의 코드를 봐주세요 무슨 이유인지 이해가 안되네요 .... 처음 시작하면 바로 거래를 열 수 있지만 닫은 후에는 작동을 멈춘 다음 터미널을 다시 시작할 때까지 또는 on / 끄기, 고문이 거래하도록 허용 ... Gann 2.0 지표에서 작동

 extern string      s0                = "Setup: Main" ;
extern int         Magic             = 1121 ;
extern double      lots              = 0.1 ;
extern int         StopLoss          = 70 ;
extern int         TakeProfit        = 140 ;
extern bool        UseTrail          = true ;
extern bool        TrailWhileMinus   = false ;
extern int         Trail             = 70 ;

extern string      s1                = "Setup: GANN indicator" ;
extern bool UseBeginDate = false ;
extern string BeginDate = "2010.01.01 00:00" ;
extern int nBarsBack = 120 ; //250;
extern string prices = "0=close, 4=median, 5=typical" ;
extern int Price_Mode = 5 ;
extern bool Show_GridMatrix = false ;
extern bool Show_GannGrid = false ;
extern bool Show_HiloArrows = true ;
extern bool Show_PriceArrows = true ;
extern bool Show_Comments = false ;
extern string ____MainGrid____ = "ooo" ;
extern color MainGrid_Color = Silver; //Green;//Sienna;
extern int MainGrid_Style = STYLE_DOT ;
extern int MinMaxGrid_Style = STYLE_SOLID ;
extern int MainGrid_Width = 1 ;
extern int fontSize = 8 ;
extern bool Draw_AllGrids = false ;
extern bool Draw_AdditionalGrids = false ;
extern string ____GannGrid____ = "ttt" ;
extern color GannGrid_Color = Silver; //Gray;
extern int GannGrid_Style = STYLE_DOT ;
extern int GannGrid_Width = 177 ;
extern string ____Default_GridParameters____ = "Recomanded GridInterval 35 or 36" ;
extern int MainGrid_Intervals = 3677 ;   //default=35(!)
extern double GannGrid_Interval = 8.0 ; //with default 8.5 is the time interval not OK; and 9 is too large
extern int Text_Shift = 50 ;

//s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift

int                slip              = 3 ;

int Ticket[ 1000 ];

void deinit() 
{
   SemaphoreDeinit( "TRADECONTEXT" );

   return ( 0 );
}


int start()
{
   static datetime TimeFlag = 0 ;
   datetime         TimeLast = Time[ 0 ];
   if (TimeFlag < TimeLast)
   {
      TimeFlag = TimeLast;
      
       int GANN = GetSignal_GANN();
      
      AnalyzeSignals(GANN);
      
       if (UseTrail == true ) TrailAllOrders();
   }
   return ( 0 );
}



void AnalyzeSignals( int GANN)
{
   static int ticket = 0 ;
   int sig = - 1 ;
   bool res;
   
   ticket = RefreshTicket(ticket);
   
   if (GANN == OP_BUY)
      sig = OP_BUY;
   else if (GANN == OP_SELL)
      sig = OP_SELL;   

   if (ticket != 0 )
   {
       OrderSelect (ticket, SELECT_BY_TICKET);      
       int type = OrderType();
      
       if (sig == OP_BUY && type == OP_SELL)
      {
         SemaphoreTake( "TRADECONTEXT" ); 
         res = OrderClose(ticket, OrderLots(), Ask, slip);
         SemaphoreReturn( "TRADECONTEXT" );
         if (!res) { Alert ( "OrderClose Error: " , GetLastError ());}
         else ticket = 0 ;
      }
   
       else if (sig == OP_SELL && type == OP_BUY)
      {
         SemaphoreTake( "TRADECONTEXT" ); 
         res = OrderClose(ticket, OrderLots(), Bid, slip);
         SemaphoreReturn( "TRADECONTEXT" );
         if (!res) { Alert ( "OrderClose Error: " , GetLastError ());}
         else ticket = 0 ;
      } 
   }   
   
   
   if (ticket == 0 )
   {   
       double _lot = lots;
   
       if (sig == OP_BUY)
      {
         SemaphoreTake( "TRADECONTEXT" ); 
         ticket = OrderSend ( Symbol (), OP_BUY, _lot, Ask, slip, Bid - StopLoss* Point , Bid + TakeProfit* Point , NULL , Magic);
         SemaphoreReturn( "TRADECONTEXT" );
         if (ticket < 0 ) { Alert ( "OrderSend Error: " , GetLastError ());}
      }
   
       else if (sig == OP_SELL)
      {
         SemaphoreTake( "TRADECONTEXT" );
         ticket = OrderSend ( Symbol (), OP_SELL, _lot, Bid, slip, Ask + StopLoss* Point , Ask - TakeProfit* Point , NULL , Magic);
         SemaphoreReturn( "TRADECONTEXT" );
         if (ticket < 0 ) { Alert ( "OrderSend Error: " , GetLastError ());}
      }
   }
}

int RefreshTicket( int ticket)
{
   bool res;
   
   if (ticket <= 0 )
       return ( 0 );
   else
   {
      res = OrderSelect (ticket, SELECT_BY_TICKET);
       if (!res)
         return ( 0 );
       else if (OrderCloseTime() != 0 )
         return ( 0 );
   }
   
   return (ticket);       //all ok, ticket still valid
}

int GetSignal_GANN()
{
   //Alert("!!: ", s1, ";", UseBeginDate, ";", BeginDate, ";", nBarsBack, ";", prices, ";", Price_Mode, ";", Show_GridMatrix, ";", Show_GannGrid, ";", Show_HiloArrows, ";", Show_PriceArrows, ";", Show_Comments, ";", ____MainGrid____, ";", MainGrid_Color, ";", MainGrid_Style, ";", MinMaxGrid_Style, ";", MainGrid_Width, ";", fontSize, ";", Draw_AllGrids, ";", Draw_AdditionalGrids, ";", ____GannGrid____, ";", GannGrid_Color, ";", GannGrid_Style, ";", GannGrid_Width, ";", ____Default_GridParameters____, ";", MainGrid_Intervals, ";", GannGrid_Interval, ";", Text_Shift);

   double ga_up = iCustom ( NULL , 0 , "Gann v2.0" , s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Color, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Color, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift, 
                                           4 , 0 );
  
   double ga_dn = iCustom ( NULL , 0 , "Gann v2.0" , s1, UseBeginDate, BeginDate, nBarsBack, prices, Price_Mode, Show_GridMatrix, Show_GannGrid, Show_HiloArrows, Show_PriceArrows, Show_Comments, ____MainGrid____, MainGrid_Color, MainGrid_Style, MinMaxGrid_Style, MainGrid_Width, fontSize, Draw_AllGrids, Draw_AdditionalGrids, ____GannGrid____, GannGrid_Color, GannGrid_Style, GannGrid_Width, ____Default_GridParameters____, MainGrid_Intervals, GannGrid_Interval, Text_Shift, 
                                           6 , 0 ); 

   Print ( "ga_up = " , ga_up);
   Print ( "ga_dn = " , ga_dn);
   
   if (ga_up > 0.0 )
       return (OP_BUY);
   else if (ga_dn > 0.0 )
       return (OP_SELL);
   else
       return (- 1 );   
}


int TrailAllOrders()
{
   int i, total;
   
   total = CreateTicketArray(OP_BUY, Magic);
   for (i= 0 ; i<total; i++)
      TrailingStop(Ticket[i]);

   total = CreateTicketArray(OP_SELL, Magic);
   for (i= 0 ; i<total; i++)
      TrailingStop(Ticket[i]);
}

void TrailingStop( int ticket)
{
   int res;
   OrderSelect (ticket, SELECT_BY_TICKET);
   
   if (OrderType() == OP_BUY)
       if (TrailWhileMinus == true || Bid-OrderOpenPrice()> Point *Trail)         //не тралим, пока не можем достичь безубытка первым переносом стопа   
         if (Bid - OrderStopLoss() > Trail* Point )
         {
            SemaphoreTake( "TRADECONTEXT" );
            res = OrderModify(OrderTicket(), 0 , Bid - Trail* Point , OrderTakeProfit(), 0 );
            SemaphoreReturn( "TRADECONTEXT" ); 
             if (res< 0 )
               Alert ( "TrailingStop OrderModify Error: " , GetLastError ());
        }
         
   if (OrderType() == OP_SELL)
       if (TrailWhileMinus == true || OrderOpenPrice()-Ask> Point *Trail)         //не тралим, пока не можем достичь безубытка первым переносом стопа
         if (OrderStopLoss() - Ask > Trail* Point )
         {
            SemaphoreTake( "TRADECONTEXT" );
            res = OrderModify(OrderTicket(), 0 , Ask + Trail* Point , OrderTakeProfit(), 0 );
            SemaphoreReturn( "TRADECONTEXT" );        
             if (res< 0 )
               Alert ( "TrailingStop OrderModify Error: " , GetLastError ());
         }
}

int CreateTicketArray( int dir, int SysID)
{
   int total= OrdersTotal (), i, c= 0 ; if (total<= 0 ) return ( 0 );
         for (i= 0 ;i<total;i++) { OrderSelect (i, SELECT_BY_POS); if ((OrderType()==dir) && (OrderMagicNumber()==SysID)) { Ticket[c] = OrderTicket(); c++; } }
         return (c);
}

//------------------------------------------SEMAPHORE------------------------------------------

int critical = 0 ; 

void SemaphoreTake( string SEM)
{ 
   if ( GlobalVariableCheck (SEM) == false )
       GlobalVariableSet (SEM, 0 );
  
   while ( 1 == 1 )
   {
       if ( GlobalVariableSetOnCondition (SEM, 1.0 , 0.0 ))         //получили доступ
      {
         critical = 1 ;
         Print ( "SEMAPHORE \"" , SEM, "\" TAKEN. CURRENT VALUE: " , GlobalVariableGet (SEM));
         break ;       //выходим из цикла ожидания доступа
      }
       else
      {
         Print ( "ATTEMPT TO CAPTURE SEMAPHORE \"" , SEM, "\" FAILED. SEMAPHORE BUSY. WAITING 0.1 SEC. CURRENT VALUE: " , GlobalVariableGet (SEM));
         Sleep ( 100 );
      }
   }
} 

void SemaphoreReturn( string SEM)
{
   GlobalVariableSet (SEM, 0.0 );
   Print ( "SEMAPHORE \"" , SEM, "\" RETURNED. CURRENT VALUE: " , GlobalVariableGet (SEM));
   critical = 0 ;
}

void SemaphoreDeinit( string SEM)     //Вставить в ф-ю  deinit()
{
   if (critical == 1 )
   {
       GlobalVariableSet (SEM,       0.0 );     //на случай, если советника убивают, пока он в процессе посылки запроса
   }  
}
 
chief2000 :
다음은 도움이 될 명령 문서의 예입니다. 작동 방식을 파악하고 매개 변수를 변경합니다.

높음[iHighest(NULL,0,MODE_HIGH,20,4)];
낮음[iLowest(NULL,0,MODE_LOW,10,10)];


감사합니다
 
chief2000 :
다음은 도움이 될 명령 문서의 예입니다. 작동 방식을 파악하고 매개 변수를 변경합니다.

높음[iHighest(NULL,0,MODE_HIGH,20,4)];
낮음[iLowest(NULL,0,MODE_LOW,10,10)];


컴퓨터에 문제가 있어서 답변이 늦어 죄송합니다.
 
chief2000 :
다음은 도움이 될 명령 문서의 예입니다. 작동 방식을 파악하고 매개 변수를 변경합니다.

높음[iHighest(NULL,0,MODE_HIGH,20,4)];
낮음[iLowest(NULL,0,MODE_LOW,10,10)];


컴퓨터에 문제가 있어서 답변이 늦어 죄송합니다.
 
al7bar :

어드바이저의 코드를 봐주세요 무슨 이유인지 이해가 안되네요 .... 처음 시작하면 바로 거래를 열 수 있지만 닫은 후에는 작동을 멈춘 다음 터미널을 다시 시작할 때까지 또는 on / 끄기, 고문이 거래하도록 허용 ... Gann 2.0 지표에서 작동

논리에 명백한 오류가 없습니다. 코드를 단계별로 인쇄하십시오. 거래 절차는 티켓 변수의 값에 연결됩니다. 우선 변경 사항을 추적하십시오. 또한 전역 터미널 변수 "TRADECONTEXT"의 값에 주의하십시오. 값은 0과 같아야 합니다.
 
TarasBY :

이 기능을 사용하면 상품(예: 주문을 열기 전에 주문 참조 없이) 및 동일한 상품에 대한 거래 정보를 받을 수 있지만 특정 주문과 함께(함께 제공되는 경우) 관련 정보를 받을 수 있습니다. 함수의 편의를 위해 기본값을 사용합니다. 거래 작업 라이브러리를 초기화할 때 음수 fi_Ticket 값이 사용됩니다.

PS 그리고 우선 변수의 이름이나 접두어에 주의를 기울이십시오. bs_Symbol과 같이 b 로 시작하는 변수는 라이브러리의 전역 수준에서 선언됩니다. 대부분의 전역 변수는 b-PSI@Base에서 선언됩니다.


이고르 , 알았다. 그러나 결론은 내가 이해하는 한 주어진 상품에 대한 시장 정보를 얻기 위해 주문에 결합할 필요가 전혀 없다는 것입니다. 악기가 있으면 여기에 더 이상 주문이 필요하지 않습니다 ... 전혀 필요하지 않습니다. 결국, 시장 정보를 얻으려면 악기 이름만 있으면 됩니다... 동의하지 않습니까?

위에서 bs_Symbol 에 대해 질문한 변수는 b-PSY@Base.mqh 를 포함할 때 처음 언급되었습니다.

  bs_Symbol,                             // текущий инструмент

그러나 그녀는 아무것도 얻지 못했습니다. 그 다음에:

 if (fs_Symbol != bs_Symbol || fi_Ticket < 0 )

다음은 표현식입니다.

fs_Symbol != bs_Symbol

다음과 같이 이해해야 합니다. fs_Symbol != 0 맞나요?

타라스BY :

PS 그리고 우선 변수의 이름이나 접두어에 주의를 기울이십시오. bs_Symbol과 같이 b 로 시작하는 변수는 라이브러리의 전역 수준에서 선언됩니다. 대부분의 전역 변수는 b-PSI@Base에서 선언됩니다.


흠. 일반적으로 나는 g_ (단어 global )를 통해 전역 변수 를 지정하고 l (예: li_cnt )을 통해 지역 변수를 의미합니까?
 

친구! 고문을 마무리하는 데 도움이 필요합니다.

특정 if 조건에서 주문을 여는 프로그램 코드가 있습니다. 조건의 실행은 int start() 의 본문에 위치하므로 매 틱마다 발생할 수 있습니다.

필요:

1. 조건을 충족한 후(그리고 주문을 연 후) 일시 중지 하여 새 주문을 열고 n개의 막대를 일시 중지합니다. 예를 들어, 고문이 M30 시간대에 있고 내가 3시간을 건너뛰어야 하는 경우 일시 중지는 6마디여야 합니다.

2. 프로그램은 전략 테스터 에서 작동해야 합니다.

어떤 코드가 필요합니다. 그리고 어디에 두는 것이 가장 좋을까요?

 int start()
  { 
   ...

   if (...)                                                           //условие
      {
       OrderSend ( Symbol (),OP_BUY,lot,Ask, 0 , 0 , 0 , "Order BUY" , 0 , 0 );     //открытие ордера
       ...
      }

   ...
  }
 
hoz :


이고르 , 알았다. 그러나 결론은 내가 이해하는 한 주어진 상품에 대한 시장 정보를 얻기 위해 주문에 결합할 필요가 전혀 없다는 것입니다. 악기가 있으면 여기에 더 이상 주문이 필요하지 않습니다 ... 전혀 필요하지 않습니다. 결국, 시장 정보를 얻으려면 악기 이름만 있으면 됩니다... 동의하지 않습니까?

위에서 bs_Symbol 에 대해 질문한 변수는 b-PSY@Base.mqh 를 포함할 때 처음 언급되었습니다.

그러나 그녀는 아무것도 얻지 못했습니다. 그 다음에:

다음은 표현식입니다.

다음과 같이 이해해야 합니다. fs_Symbol != 0 맞나요?


흠. 일반적으로 나는 g_ (단어 global )를 통해 전역 변수를 지정하고 l (예: li_cnt )을 통해 지역 변수를 의미합니까?

아직 배울 것이 많습니다. 당신의 가정이 사실이 아니지만. 내 함수는 특히 fGet_MarketInfo()와 같이 다른 목적(코드 자체를 줄이기 위해)을 동시에 수행할 수 있습니다. 모든 것이 반복적으로 생각되었으며 변경할 필요가 없습니다!

그리고 예를 들어 실험으로 시작하십시오. EA 본문에 전역 변수 를 선언하고 연결된 라이브러리에서 이 변수를 호출해 보십시오. 얻은 결과를 b 로 시작하는 접두사가 있는 변수의 이름과 연관시키십시오(예: bs_Symbol).

추신: 확인할 필요가 없습니다. 내 라이브러리를 사용하거나 사용하지 않습니다. 무언가(내 라이브러리 중 일부)가 올바르게 작동하지 않는 경우 알려주시면 수정하겠습니다. 그리고 질문하기 - "왜 그렇게 작동합니까?" - "증거가 표면에 있지 않기 때문에" 더 많은 지식이 필요합니다.

 
TarasBY :

아직 배울 것이 많습니다. 당신의 가정이 사실이 아니지만. 내 함수는 특히 fGet_MarketInfo()와 같이 다른 목적(코드 자체를 줄이기 위해)을 동시에 수행할 수 있습니다. 모든 것이 반복적으로 생각되었으며 변경할 필요가 없습니다!

나는 거기에 무엇이 있는지 이해합니다. 그러나 왜 이렇게 되었는지는 분명하지 않습니다.

타라스BY :

그리고 예를 들어 실험으로 시작하십시오. EA 본문에 전역 변수를 선언하고 연결된 라이브러리에서 이 변수를 호출해 보십시오. 얻은 결과를 b 로 시작하는 접두사가 있는 변수의 이름과 연관시키십시오(예: bs_Symbol).

원래 형식에서는 여전히 라이브러리를 사용할 수 없습니다. 모든 것이 연결되어 있습니다. 다른 팩의 각 기능..

타라스BY :

추신: 확인할 필요가 없습니다. 내 라이브러리를 사용하거나 사용하지 않습니다. 무언가(내 라이브러리 중 일부)가 올바르게 작동하지 않는 경우 알려주시면 수정하겠습니다. 그리고 질문하기 - "왜 그렇게 작동합니까?" - "증거가 표면에 있지 않기 때문에" 더 많은 지식이 필요합니다.

어떤 경우에도 확인하고 싶지 않았습니다 .. 게다가 모든 것이 매우 유능하게 작성되었다는 것은 의심의 여지가 없습니다. 다만 다 잘 이해가 안가서 옳지 않다고 생각해서 말씀드린거구요.. 보고, 생각합니다.. 하지만 다 이해가 안가네요. 그것이 그가 물은 것입니다.

추신 bs_Symbol 을 사용하여 이해하지 못했습니다.