Hareketli ortalamanın açısı nasıl elde edilir? - sayfa 2

 
Kodum 0 açısı döndürmeye devam ederken lütfen bağlam içeren bir kod gönderir misiniz? Örneğin, 10 periyot üzerinden SMA 50 açısını bulun.
 
jretzloff :
Kodum 0 açısı döndürmeye devam ederken lütfen bağlam içeren bir kod gönderir misiniz? Örneğin, 10 periyot üzerinden SMA 50 açısını bulun.
:) neden kodunuzu göndermiyorsunuz, diğerlerinin size yardımcı olması için 0 açısı döndürmeye devam ediyor ?
 
DxdCn :
jretzloff :
Kodum 0 açısı döndürmeye devam ederken lütfen bağlam içeren bir kod gönderir misiniz? Örneğin, 10 periyot üzerinden SMA 50 açısını bulun.
:) neden kodunuzu göndermiyorsunuz, diğerlerinin size yardımcı olması için 0 açısı döndürmeye devam ediyor ?

Temel olarak, saçmalıklarla dolu olduğu için onu çalıştırmaya çalışıyorum. ..baskı ifadeleriyle dolu, vb.. Daha sonra görselleştirmede olası kullanım için hesaplamayı denemek ve test etmek tam bir hack. Her neyse, işte burada:

 //+------------------------------------------------------------------+
//|                                                  Angle of MA.mq4 |
//|                                Copyright © 2007,                 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright " Copyright © 2007 "
#property link      ""
 
#property indicator_separate_window
#property indicator_minimum - 60.0
#property indicator_maximum 60.0
#property indicator_buffers 1
#property indicator_color1 Lime
#property indicator_width1 3
/*#property indicator_color2 Red
#property indicator_width2 3
*/
 
extern int MAPeriod = 50 ;
extern int SignalPeriod = 10 ;
 
double posAngle [] , negAngle [] ;
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init ()
  {
//---- indicators
 
   IndicatorBuffers ( 1 ) ;
   
   SetIndexBuffer ( 1 , posAngle ) ;
   //SetIndexStyle(1, DRAW_ARROW);
   SetIndexStyle ( 1 , DRAW_HISTOGRAM ) ;
   //SetIndexArrow(1, 110);
   SetIndexLabel ( 1 , " Positive Angle " ) ;
   SetIndexEmptyValue ( 1 , 0.0 ) ;
   
   /*SetIndexBuffer(2, negAngle);
   //SetIndexStyle(2, DRAW_ARROW);
   SetIndexStyle(2, DRAW_HISTOGRAM);
   //SetIndexArrow(2, 110);
   SetIndexLabel(2, "Negative Angle");
   SetIndexEmptyValue(2, 0.0);*/
   
   ArrayInitialize ( posAngle , 0.0 ) ;
   //ArrayInitialize(negAngle, 0.0);
 
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit ()
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start ()
  {
   
   int counted_bars = IndicatorCounted () ;
   if ( counted_bars < 0 ) 
       return ( - 1 ) ;
   if ( counted_bars > 0 ) 
       counted_bars --;
   int limit = Bars - counted_bars ; 
   
   double angle = 0.0 ;
   double price1 = 0.0 , price2 = 0.0 ;
//----
   for ( int x = 0 ; x < limit ; x ++ ) 
   {
      //if (x >= MAPeriods) 
      //{
         angle = 0.0 ;
         price1 = iMA ( Symbol () , 0 , MAPeriod , 0 , MODE_SMA , PRICE_CLOSE , 0 ) ;
         price2 = iMA ( Symbol () , 0 , MAPeriod , SignalPeriod , MODE_SMA , PRICE_CLOSE , 0 ) ;
         double test = ( SignalPeriod - 0.0 ) / WindowBarsPerChart () ;
         //Print("test: ", test);
         Print ( " Price1/2 " , price1 , " / " , price2 , " angle-> " , angle ) ;
         Print ( " price1-price2: " , price1 - price2 ) ;
         //Print("WindowPriceMin(): ", WindowPriceMin());
         //Print("WindowPriceMax(): ", WindowPriceMax());
         //Print("WindowPriceMax()- WindowPriceMin(): ", WindowPriceMax()- WindowPriceMin());
         //Print("WindowBarsPerChart(): ", WindowBarsPerChart());
         //Print("SignalPeriod: ", SignalPeriod);
         //Print("(SignalPeriod-0)/WindowBarsPerChart()): ", (SignalPeriod-0.0)/WindowBarsPerChart());
         
         
         if ( price1 - price2 > 0 )
            angle = MathArctan ( MathTan ((( price1 - price2 ) / ( WindowPriceMax () - WindowPriceMin ())) / (( SignalPeriod - 0.0 ) / WindowBarsPerChart ()))) * 180 / 3.14 ; 
         else
            angle = 0.0 ;
            
         Print ( " Angle > 0: " , angle > 0.0 ) ;
         Print ( " Angle < 0: " , angle < 0.0 ) ;
         
         if ( angle > 0.0 )
         {
            Print ( " +++++++++++++++++++ ANGLE +++++++++++++++++++ " ) ;
            posAngle [ x ] = angle ;
            //negAngle[x] = 0.0;
         }
         else if ( angle < 0.0 )
         {
            Print ( " ------------------- ANGLE ------------------- " ) ;
            //negAngle[x] = angle;
            posAngle [ x ] = 0.0 ;  
         }
         else // some error occurred
         {
            Print ( " ******************* ANGLE ******************* " ) ;
            posAngle [ x ] = 0.0 ;
            //negAngle[x] = 0.0;
         }
         
      /*}
      else
      {
         posAngle[x] = 0.0;
         negAngle[x] = 0.0;
      }*/
      Print ( " posAngle[x]: " , posAngle [ x ]) ;
      Print ( " negAngle[x]: " , negAngle [ x ]) ;
      Print ( " Angle [ " , TimeToStr ( Time [ x ] , TIME_DATE | TIME_MINUTES ) , " ] ---------------------------------------------> " , angle ) ;
   }
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
 

HAYIR bu kadar çok cde'ye gerek yok!
Sizde:
MathArctan (MathTan(((price1-price2)/(WindowPriceMax()- WindowPriceMin()))/((SignalPeriod-0. 0)/WindowBarsPerChart())))*180/3.14;


"SignalPeriod"un anlamı nedir ve neden?

Bilirsiniz, genellikle açı, bir doğru ile X eksenleri arasındaki ilişkidir, bu doğru iki nokta ile tanımlanır.
Hesaplamanızda fiyat2 ve fiyat1 aynı X koordinatında iki değerdir,

Benim formülümde açıyı hesaplamak için (delt Y) / (delt X) kullanın:
MathArctan(MathTan(
((price1-price2)/(WindowPriceMax()- WindowPriceMin())) // delt Y
/
((shift2-shift1)/WindowBarsPerChart()) // delt X
))
*180/3.14

 

shift1 ve shift2 için değerler ne olurdu? veya nereden hesaplanıyor? Bunun benim sorunum olduğunu biliyorum ama hareketli ortalama ile nasıl uygulanacağını anlamıyorum.

 
burada açı, bir doğru ile X eksenleri arasındaki bağıntıdır,
bir çizgi iki nokta ile tanımlanır.
(price1,shift1), (price2,shift2) bu iki noktanın koordinatlarıdır. kodunuzdaki x ile aynı shift.
-------------------------------------------------- -
Başka bir deyişle, herhangi iki doğrunun açısını hesaplamanız gerekiyorsa, 3 veya 4 noktaya ihtiyacınız vardır (iki satırın tanımlanması için 3 veya 4 nokta gerekir) ve daha fazla trigonometrik fonksiyonlar bilgisine ihtiyacınız vardır.
kodunuzdan, bir satırın ve X ekseninin açısını değil, herhangi iki satırın (iki MACD satırı gibi) açısını hesaplamak istediğinizi tahmin ediyorum.
Bu yüzden 3 veya 4 puana ihtiyacınız var, daha fazla trigonometrik fonksiyonlar bilgisini, belki de kosinüs yasasını gözden geçirmelisiniz.
--------------------------
Veya 1. doğrulardan birinin ve X eksenlerinin her bir açısını hesaplayın, 2. farkları o iki doğrunun açısıdır.
 

Cevabınız için teşekkür ederim, sadece tek bir çizginin açısını, yani hareketli ortalamayı ve x eksenini hesaplamaya çalışıyorum. MT aracılığıyla mevcut olanlarla değil, hesaplamaları gerçekleştirmek için trig hakkında yeterince bilgim var.

çok basit bir şekilde, ikinci referans noktası SignalPeriod'daki MA veya ? barlar daha erken. diğer referans noktası, 0 y kayması ile SignalPeriod x'in kesişimi olacaktır.

 
Öyleyse, fiyat2 şu şekilde değişmelidir:
fiyat2 = iMA (Symbol(),0,MAPeriod,0, MODE_SMA,PRICE_CLOSE,SignalPeriod);

X koordinatı (SignalPeriod), iMA(....) fonksiyonunun 4. parametresi değil, son parametresi olmalıdır. (4. paragraf: ma_shift başka bir anlamdır, ne olduğunu bilmiyorsanız kullanmayın !!!!)
Şimdi Tamam, tekrar deneyin!
 
  Whats Wrong with this code ? ? ? 
  I am trying to 4 angles but I keep getting a divide 0 error ? 
  Thanks, 
  KK
  
 
  VectorPer = 16;
 
  HighStartPoint       = iHigh(Symbol(),0,VectorPer);
  PreviousBarHigh      = iHigh(Symbol(),0,SIGNALCANDLE+1);
  HighestPoint         = High[iHighest(Symbol(),0,MODE_HIGH,VectorPer,SIGNALCANDLE+1)];
  HighestAngle         = MathArctan(MathTan(((HighStartPoint-HighestPoint)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer-SIGNALCANDLE+1)/WindowBarsPerChart())))*180/3.14;
  PreviousHighBarAngle = MathArctan(MathTan(((HighStartPoint-PreviousBarHigh)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer-SIGNALCANDLE+1)/WindowBarsPerChart())))*180/3.14;
 
  pHighStartPoint       = iHigh(Symbol(),0,VectorPer+1);
  pPreviousBarHigh      = iHigh(Symbol(),0,SIGNALCANDLE+2);
  pHighestPoint         = High[iHighest(Symbol(),0,MODE_HIGH,VectorPer+1,SIGNALCANDLE+2)];
  pHighestAngle         = MathArctan(MathTan(((pHighStartPoint-pHighestPoint)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer+1-SIGNALCANDLE+2)/WindowBarsPerChart())))*180/3.14;
  pPreviousHighBarAngle = MathArctan(MathTan(((pHighStartPoint-pPreviousBarHigh)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer+1-SIGNALCANDLE+2)/WindowBarsPerChart())))*180/3.14;
  
  LowStartPoint        = iLow(Symbol(),0,VectorPer);
  PreviousBarLow       = iLow(Symbol(),0,SIGNALCANDLE);
  LowestPoint          = Low[iLowest(Symbol(),0,MODE_LOW,VectorPer,SIGNALCANDLE+1)];
  LowestAngle          = MathArctan(MathTan(((LowStartPoint-LowestPoint)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer-SIGNALCANDLE+1)/WindowBarsPerChart())))*180/3.14;
  PreviousLowBarAngle  = MathArctan(MathTan(((LowStartPoint-PreviousBarLow)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer-SIGNALCANDLE+1)/WindowBarsPerChart())))*180/3.14;
 
  pLowStartPoint        = iLow(Symbol(),0,VectorPer+1);
  pPreviousBarLow       = iLow(Symbol(),0,SIGNALCANDLE+2);
  pLowestPoint          = Low[iLowest(Symbol(),0,MODE_LOW,VectorPer,SIGNALCANDLE+2)];
  pLowestAngle          = MathArctan(MathTan(((pLowStartPoint-pLowestPoint)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer+1-SIGNALCANDLE+2)/WindowBarsPerChart())))*180/3.1415;
  pPreviousLowBarAngle  = MathArctan(MathTan(((pLowStartPoint-pPreviousBarLow)/(WindowPriceMax()- WindowPriceMin()))/((VectorPer+1-SIGNALCANDLE+2)/WindowBarsPerChart())))*180/3.1415;
 
Neden: