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

 

나는 어제 내가 질문한 것에 대해 여기에서 코드를 다시 수정했습니다. 이제 모든 것이 원래대로입니다. 아래에서 초기 신호를 얻는 데 사용되는 것이 명확하도록 3가지 기능 을 제공합니다. 이것은 내가 쓰는 것의 시작에 불과합니다.

 //+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade( int signal)
{
   double fastMa = iMA ( NULL ,i_TF,i_fastMaPeriod, 0 , MODE_EMA ,MODE_CLOSE, 0 );
   double slowMa = iMA ( NULL ,i_TF,i_slowMaPeriod, 0 , MODE_EMA ,MODE_CLOSE, 0 );
   
   DeletePendingOrders();
   
   if (signal == SIGNAL_BUY)
       if (!OpenBuy(fastMa, slowMa))
           return ( false );
   
   if (signal == SIGNAL_SELL)
       if (!OpenSell(fastMa, slowMa))
           return ( false );
       
   return ( true );
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   // Получаем значения машек для дальнейших рассчётов
   double fastMa = iMA ( NULL ,i_TF,i_fastMaPeriod, 0 , MODE_EMA ,MODE_CLOSE, 0 );
   double slowMa = iMA ( NULL ,i_TF,i_slowMaPeriod, 0 , MODE_EMA ,MODE_CLOSE, 0 );
 //  double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0);
   
   if (FindOrders() > 0 )                                 // Если есть открытые ордера, то..
       return (SIGNAL_NO);                               //..ничего не делаем
   
   if (GetStateMa(fastMa, slowMa /*, filtrMa*/ ) == MA_DIRECT_TO_UP)       // Если машки указывают вверх
       if ( ( MathAbs (High[ 0 ] - fastMa) <= 0.1 * pt ) || ( MathAbs (Low[ 0 ] - fastMa) <= 0.1 * pt) )     // Цена вблизи 0.1пп от fastMa
           return (SIGNAL_BUY);       // Функция возвращает сигнал покупки
       
 //  if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN)
   //    return(SIGNAL_SELL);
   
   return (SIGNAL_NO);
}

구매 기능은 다음과 같습니다.

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy( double fastMa, double slowMa)
{
   int ticket = - 1 ;
   
//   if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
   {
       if ((fastMa + i_thresholdFromMa * pt) > Ask)             // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       Print ( "fastMa = " , DoubleToStr(fastMa, Digits ));
       Print ( "i_thresholdFromMa = " , DoubleToStr(i_thresholdFromMa * pt, Digits ));
       ticket = OrderSend ( Symbol (), OP_BUYSTOP, 0.1 , ND(fastMa + i_thresholdFromMa * pt), 3 , 0 , 0 , NULL , i_magic, 0 );
       Print ( "OrderOpenPrice() = " , DoubleToStr(OrderOpenPrice(), Digits ));
   }
       if (ticket > 0 && OrderSelect (ticket, SELECT_BY_TICKET == true ))
 
   return ( true );
}

여기에 한 줄이 있습니다.

ticket = OrderSend ( Symbol (), OP_BUYSTOP, 0.1 , ND(fastMa + i_thresholdFromMa * pt), 3 , 0 , 0 , NULL , i_magic, 0 );

ND(fastMa + i_thresholdFromMa * pt) 의 가격으로 우리와 함께 포지션을 열었지만 전혀 열리지 않습니다. 왜요?

2일째 치고 있는데 어떻게 해야할지 모르겠습니다. 모든 것이 코드에서 일관됩니다. 사실, 나는 수표를 쓰지 않았고 지금까지 테스터를 위해 쓰고 있습니다.

다음은 예를 들어 스크린샷입니다.

캔트

차트는 가격이 fastMa(빨간 점)보다 높지는 않지만 일반적으로 더 낮다는 것을 보여줍니다. 그러나 코드에는 연기가 가격에 있어야 한다는 조건이 명확하게 표시되어 있습니다.

ND(fastMa + i_thresholdFromMa * pt)

캐치 전문가는 무엇입니까? 앞으로 어떻게 해야 할지 모르겠어...

 

안녕하세요. 나는 지표를 기반으로 지표를 작성했습니다 .차트에 설치된 초기 "Signal-Signal"지표는 이전 모든 막대의 값을 보여줍니다 (막대 번호 [1]부터 시작하여 모든 막대에서 계산됨) . 그리고 여기에 구축된 표시기가 있습니다(이 표시기는 막대 #[0]에서 간주됨), 차트에 설치된 순간부터 값만 표시합니다. 값은 정확하지만 이전 막대에서 - "비어있습니다". 이 문제를 해결하는 방법을 알려주세요. 여러 가지를 시도해 보았지만 아무 것도 작동하지 않았습니다.

내 코드:

#property indicator_separate_window
#property indicator_minimum -7
#property indicator_maximum 7
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 DarkOrange
#property indicator_width1  2
#property indicator_width2  2
#property indicator_level1 0.0
//--- buffers
double UpMapBuffer[];
double DnMapBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,UpMapBuffer);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,DnMapBuffer);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int vb;   // внутренний бар
    int i;

    for(i=1;i<Bars-34-1;i++)                                               
     {
      double AO_Sig_Sig_1 = iCustom(NULL,0,"Signal-Signal",0,i);                           
      double AO_Sig_Sig_2 = iCustom(NULL,0,"Signal-Signal",0,i+1);
      
      if((High[i]<=High[i+1])&&(Low[i]>=Low[i+1])&&(AO_Sig_Sig_1==AO_Sig_Sig_2))  vb++;
            
      if((AO_Sig_Sig_1!=AO_Sig_Sig_2)||(i>3+vb)) break;                                                                
     }
         
    i=i*(AO_Sig_Sig_1); 
            
    if(MathAbs(i)>3+vb) i=0;                  

    if(i>0)            
     {
      UpMapBuffer[0]=i;
     }
    else
     {
      UpMapBuffer[0]=0;
     } 
         
    if(i<0)         
     {
      DnMapBuffer[0]=i;
     }
    else
     {
      DnMapBuffer[0]=0;
     }          
                      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

빅터, 아스크+거리에 지연을 둘 필요가 있다고 생각하고, 아스크와 마슈카의 관계를 규정하는 조건에서 그러면 원하는 대로 될 것이다. 노력하다!

 
hoz :


차트는 가격이 fastMa(빨간 점)보다 높지는 않지만 일반적으로 더 낮다는 것을 보여줍니다. 그러나 코드에는 연기가 가격에 있어야 한다는 조건이 명확하게 표시되어 있습니다.

캐치 전문가는 무엇입니까? 다음에는 어떻게 해야할지 모르겠어...

아마도 주문이 접수된 그 순간에 Mashka는 지금보다 낮았을 것입니다. 0번째 막대가 아니라 1번째 막대에서 눈금 값을 가져오십시오.
 
borilunad :

빅터님, 아스크+거리에 지연을 두는 것이 필요하다고 생각하고, 아스크와 마슈카의 관계를 규정하는 조건에서 그러면 당신이 원하는 대로 될 것입니다. 노력하다!


보리스, 이것이 내가 한 일입니다.

 //+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   // Получаем значения машек для дальнейших рассчётов
   double fastMa = iMA ( NULL ,i_TF,i_fastMaPeriod, 0 , MODE_EMA ,MODE_CLOSE, 0 );
   double slowMa = iMA ( NULL ,i_TF,i_slowMaPeriod, 0 , MODE_EMA ,MODE_CLOSE, 0 );
 //  double filtrMa = iMA(NULL,i_TF,i_filtrMaPeriod,0,MODE_SMA,MODE_CLOSE,0);
   
   if (FindOrders() > 0 )                                 // Если есть открытые ордера, то..
       return (SIGNAL_NO);                               //..ничего не делаем
   
   if (GetStateMa(fastMa, slowMa /*, filtrMa*/ ) == MA_DIRECT_TO_UP)       // Если машки указывают вверх
       // if ( (MathAbs(High[0] - fastMa) <= 0.1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )     // Цена вблизи 0.1пп от fastMa
       if ( ( MathAbs (Ask - fastMa) <= 0.1 * pt ) || ( MathAbs (Ask - fastMa) <= 0.1 * pt) )
           return (SIGNAL_BUY);       // Функция возвращает сигнал покупки
       
 //  if (GetStateMa(fastMa, slowMa/*, filtrMa*/) == MA_DIRECT_TO_DOWN)
   //    return(SIGNAL_SELL);
   
   return (SIGNAL_NO);
}

다음은 포지션 개시입니다.

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy( double fastMa, double slowMa)
{
   int ticket = - 1 ;
   
       if ((fastMa + i_thresholdFromMa * pt) > Ask)             // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       Print ( "fastMa = " , DoubleToStr(fastMa, Digits ));
       Print ( "i_thresholdFromMa = " , DoubleToStr(i_thresholdFromMa * pt, Digits ));
       ticket = OrderSend ( Symbol (), OP_BUYSTOP, 0.1 , ND(fastMa + i_thresholdFromMa * pt), 3 , 0 , 0 , NULL , i_magic, 0 );
       Print ( "OrderOpenPrice() = " , DoubleToStr(OrderOpenPrice(), Digits ));
      
       if (ticket > 0 && OrderSelect (ticket, SELECT_BY_TICKET == true ))
 
   return ( true );
}

모든 것이 맞는 것 같습니다. 그러나 상황은 여전히 있습니다.

무덤 :
아마도 주문이 접수된 그 순간에 Mashka는 지금보다 낮았을 것입니다. 0번째 막대가 아니라 1번째 막대에서 눈금 값을 가져오십시오.


그것을 시도, 차이가 없습니다. 되돌려 줬습니다.. 나에게 중요한 것은 이전에 일어난 일이 아니라 주어진 순간에 일어나는 일입니다.

다음은 화면입니다(마우스에서 받은 값이 0이 아닌 1인 경우).

논리는 어디에 있습니까?

 

따라서 Victor, 나는 모든 것을 한 눈에 볼 수 있도록 처음에 조건을 처방합니다. 그러면 논리적 오류를 찾기가 더 쉽습니다. 특히 아직 충분한 지식과 경험이 없을 때 나 자신이 오랫동안 순위를 매길 것입니다. 시각. 전문가들은 기능, 파일, 라이브러리를 쉽게 조작하고 이러한 모든 지혜를 점차적으로 마스터하는 방법을 잊었을 것입니다. 그리고 우리는 실습 없이 이론을 공부할 수 없으며 훨씬 더 많은 것이 각 사람의 기질에 달려 있습니다.

 
hoz :


보리스, 이것이 내가 한 일입니다.

다음은 포지션 개시입니다.

모든 것이 맞는 것 같습니다. 그러나 상황은 여전히 있습니다.


그것을 시도, 차이가 없습니다. 되돌려 줬습니다.. 나에게 중요한 것은 이전에 일어난 일이 아니라 현재 일어나고있는 일 입니다.

다음은 화면입니다(마우스에서 받은 값이 0이 아닌 1인 경우).

음, 마지막으로 정확히 무엇을 하고 싶은지 말씀해 주세요... 예를 들어: Mashka 등이 올라가고 있고 Mashka 보다는 높고 가격이 있는 동안 Mashka 등이 위/아래, 그리고 이 모든 것이 사실이면 이런 거리에서 이런저런 지연을 설정합니다. 예제 알고리즘을 알려 드리겠습니다. 그런 다음 컨텍스트에서 가져온 코드 조각에서 올바른 방향으로 안내하기가 어렵습니다. 근데 문제는 뭔가 5학년(과장)


강조 표시된 것과 관련하여 : 시작 가격으로 작업하면 0 막대에서 MA를 다시 그리지 않습니다.

 
artmedia70 :

... 올바른 방향으로 안내하기 어렵습니다 ...

IMHO, 어렵지는 않지만 "보내기"또는 보내기는 매우 쉽습니다. 동지가 교과서와 문서를 공부하는 데 정말로 귀찮게하지 않고 마스크와 예금에 대한 싸움을 너무 열성적으로 수행했기 때문입니다. :-)

 
Roman. :

IMHO, 어렵지는 않지만 "보내기"또는 보내기는 매우 쉽습니다. 동지가 교과서와 문서를 공부하는 데 정말로 귀찮게하지 않고 마스크와 예금에 대한 싸움을 너무 열성적으로 수행했기 때문입니다. :-)

젠장, 거기에는 함정이 거의 없으며 ... 기적은 일어나지 않습니다.
이것은 사람이이 돌로 자신을 덮고 움직이고 움직인다는 것을 의미합니다.
 
Sepulca :


정말 감사합니다. 정확히 당신이 필요로하는 것)