[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 131

 

Dün sorduğum şeyle ilgili olarak burada bir kod parçasını yeniden düzenledim. Şimdi her şey olması gerektiği gibi. Aşağıda 3 fonksiyon verdim, böylece ilk sinyali elde etmek için neyin kullanıldığı açık olacaktı, çünkü bu yazdıklarımın sadece başlangıcı.

 //+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
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);
}

İşte satın alma işlevi:

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
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 );
}

Burada bir satır var:

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

ND(fastMa + i_thresholdFromMa * pt) fiyatında bizimle bir pozisyon açıyor, ancak orada hiç açılmıyor. Niye ya?

2 gündür dövüyorum ne yapacağımı bilmiyorum. Kodda her şey tutarlı. Gerçekten, herhangi bir çek yazmadım, şimdiye kadar test cihazı için yazıyorum.

İşte örneğin bir ekran görüntüsü

yapamamak

Grafik, fiyatın fastMa'dan (kırmızı nokta) daha yüksek olmadığını, ancak genel olarak daha düşük olduğunu gösteriyor. Ancak kodda, ertelemenin bir fiyata olması koşulu açıkça belirtilmiştir:

ND(fastMa + i_thresholdFromMa * pt)

Yakalama uzmanları nelerdir? Bundan sonra ne yapacağımı bilmiyorum...

 

Merhaba. Göstergeye dayalı bir gösterge yazdım.İlk "Sinyal-Sinyal" göstergesi, çizelgeye kurulduğunda, değerlerini önceki tüm çubuklarda gösterir ([1] numaralı çubuktan başlayarak tüm çubuklarda hesaplanır) Ve işte ondan oluşturulan gösterge (bu gösterge #[0] çubuğundan kabul edilir), değerlerini yalnızca çizelgeye kurulduğu andan itibaren gösterir.Değerler doğrudur, ancak önceki çubuklarda - "boş" Lütfen bana bunu nasıl düzelteceğimi söyleyin. Bir çok şey denedim ama hiçbiri işe yaramadı.

Kodum:

#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);
  }
//+------------------------------------------------------------------+
 

Viktor, bence Ask + mesafesine bir gecikme koymak ve Ask ve Mashka ilişkisini reçete etmek koşuluyla, o zaman istediğin olacak. Denemek!

 
hoz :


Grafik, fiyatın fastMa'dan (kırmızı nokta) daha yüksek olmadığını, ancak genel olarak daha düşük olduğunu gösteriyor. Ancak kodda, ertelemenin bir fiyata olması koşulu açıkça belirtilmiştir:

Yakalama uzmanları nelerdir? Bundan sonra ne yapacağımı bilmiyorum...

Belki de siparişin verildiği o anda, Mashka şimdi çizildiğinden daha aşağıdaydı. 0. çubuktan değil 1. çubuktan kenelerin değerlerini almaya çalışın.
 
borilunad :

Viktor, bence Ask + mesafesine bir gecikme koymak ve Ask ve Mashka ilişkisini reçete etmek koşuluyla, o zaman istediğin olacak. Denemek!


Boris, yaptığım şey buydu:

 //+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
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);
}

Ve işte pozisyon açılışı:

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
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 );
}

Her şey doğru gibi görünüyor. Ama işler hala orada.

Sepulca :
Belki de siparişin verildiği o anda, Mashka şimdi çizildiğinden daha aşağıdaydı. Kenelerin değerlerini 0'dan değil, 1. çubuktan almaya çalışın.


denedim fark yok Onu geri verdim.. Benim için önemli olan, daha önce ne olduğu değil, zamanın belirli bir anında ne olduğudur.

İşte bir ekran (fareden alınan değer 0 değil, 1 ise):

mantık nerede?

 

Victor, bu nedenle, her şeyi bir bakışta görebilmem için başlangıçta koşulları belirliyorum, o zaman özellikle kendimi uzun süre sıralayacağım yeterli bilgi ve deneyim olmadığında, mantıksal hataları bulmak daha kolay. zaman. Profesyoneller, işlevleri, dosyaları, kitaplıkları kolayca manipüle eder ve muhtemelen tüm bu bilgeliklerde yavaş yavaş nasıl ustalaştıklarını unuttular. Ve pratik olmadan teori çalışamayız ve çok daha fazlası her kişinin mizacına bağlıdır.

 
hoz :


Boris, yaptığım şey buydu:

Ve işte pozisyon açılışı:

Her şey doğru gibi görünüyor. Ama işler hala orada.


denedim fark yok Geri iade ettim.. Benim için önemli olan, daha önce ne olduğu değil, şu anda ne olduğu .

İşte bir ekran (fareden alınan değer 0 değil, 1 ise):

Pekala, nihayet, tam olarak ne yapmak istediğini söyle... Örneğin: Mashka falan yükseliyor ve Mashka falandan daha yüksek, fiyat oradayken, Mashka falanın altında / üstünde, ve tüm bunlar doğruysa , o zaman böyle ve böyle bir mesafeye böyle bir gecikme ayarlayın. Size örnek bir algoritma vereceğim. Ve sonra, bağlam dışı alınan kod parçalarından sizi doğru yöne yönlendirmek zordur. Ama sorun beşinci sınıf için bir şey (abartılı)


Vurgulananla ilgili olarak : açılış fiyatlarında çalışın, o zaman sıfır çubuğunda MA'ların yeniden çizilmesi olmayacak

 
artmedia70 :

... sizi doğru yöne yönlendirmek zor ...

IMHO, zor değil, ama "göndermek" veya göndermek çok kolay, çünkü yoldaş, ders kitabını ve belgeleri incelemek için gerçekten zahmet etmeden maskelere ve mevduatlara karşı mücadeleyi çok gayretle üstlendi. :-)

 
Roman. :

IMHO, zor değil, ama "göndermek" veya göndermek çok kolay, çünkü yoldaş, ders kitabını ve belgeleri incelemek için gerçekten zahmet etmeden maskelere ve mevduatlara karşı mücadeleyi çok gayretle üstlendi. :-)

Kahretsin, orada neredeyse hiç tuzak yok ... ve mucizeler olmuyor.
Demek ki kişi bu taşlarla kendini kaplamış ve onları hareket ettiriyor, hareket ettiriyor.
 
Sepulca :


Çok teşekkürler. tam olarak neye ihtiyacın var)
Neden: