Wie erhält man den Winkel eines gleitenden Durchschnitts? - Seite 2

 
Könnten Sie bitte einen Code mit Kontext posten, da mein Code weiterhin einen Winkel von 0 zurückgibt? Finden Sie zum Beispiel den Winkel des SMA 50 über 10 Perioden.
 
jretzloff:
Könnten Sie bitte einen Code mit Kontext posten, da mein Code weiterhin einen Winkel von 0 zurückgibt? Zum Beispiel, finden Winkel von SMA 50 über 10 Perioden.
:), warum Sie nicht Ihren Code posten weiterhin einen Winkel von 0 für andere, Ihnen zu helfen zurückgeben?
 
DxdCn:
jretzloff:
Könnten Sie bitte einen Code mit Kontext posten, da mein Code weiterhin einen Winkel von 0 zurückgibt? Zum Beispiel, finden Winkel von SMA 50 über 10 Perioden.
:) warum posten Sie Ihren Code nicht, der weiterhin einen Winkel von 0 zurückgibt, damit andere Ihnen helfen können?

Im Grunde genommen, weil er voller Mist ist, mit dem ich versucht habe, ihn zum Laufen zu bringen...voller Druckanweisungen, etc. Es ist ein totaler Hack, um zu versuchen, die Berechnung für eine mögliche spätere Verwendung in der Visualisierung zu testen. Wie auch immer, hier ist es:

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

NO brauchen so viele cdes!
In Ihrem Cade:
MathArctan(MathTan(((price1-price2)/(WindowPriceMax()- WindowPriceMin()))/((SignalPeriod-0. 0)/WindowBarsPerChart())))*180/3.14;


Was ist die Bedeutung von "SignalPeriod" und warum?

Sie wissen, dass ein Winkel im Allgemeinen die Beziehung zwischen einer Linie und der X-Achse ist, die durch zwei Punkte definiert ist.
In Ihrer Berechnung sind Preis2 und Preis1 zwei Werte an derselben X-Koordinate,

In meiner Formel verwende ich (delt Y) / (delt X), um den Winkel zu berechnen:
MathArctan(MathTan(
((preis1-preis2)/(FensterPreisMax()- FensterPreisMin())) // ist delt Y
/
((shift2-shift1)/WindowBarsPerChart()) // ist delt X
))
*180/3.14

 

was wären die Werte für shift1 und shift2? oder woher werden sie berechnet? ich weiß, dass dies mein Problem war, aber ich verstehe nicht, wie man es mit dem gleitenden Durchschnitt anwendet.

 
hier ist ein Winkel die Beziehung zwischen einer Linie und der X-Achse,
eine Linie wird durch zwei Punkte definiert.
(preis1,shift1), (preis2,shift2) sind die Koordinaten dieser beiden Punkte. shift ist das gleiche wie x in Ihrem Code.
---------------------------------------------------
Mit anderen Worten, wenn Sie den Winkel zwischen zwei Linien berechnen wollen, benötigen Sie 3 oder 4 Punkte (zwei Linien benötigen 3 oder 4 Punkte, um definiert zu werden), und Sie brauchen mehr Wissen über trigonometrische Funktionen.
Aus Ihrem Code schließe ich, dass Sie den Winkel zwischen zwei Linien (wie zwei Linien des MACD) berechnen wollen, nicht den Winkel zwischen einer Linie und der X-Achse.
Sie brauchen also 3 oder 4 Punkte, sollten sich mehr Wissen über trigonometrische Funktionen aneignen, vielleicht über das Kosinusgesetz.
--------------------------
Oder, 1. berechnen Sie jeden Winkel zwischen einer der Linien und der X-Achse, 2. ihre Differenz ist der Winkel zwischen diesen beiden Linien.
 

Vielen Dank für Ihre Antwort, ich versuche nur, den Winkel einer einzelnen Linie, d.h. ein gleitender Durchschnitt und die x-Achse zu berechnen. Ich weiß genug über Trig, um die Berechnungen durchzuführen, nur nicht mit dem, was durch MT verfügbar ist.

sehr einfach, ich möchte den aktuellen Winkel des MA bei Verschiebung 0 mit dem zweiten Bezugspunkt, der MA bei SignalPeriod oder MA bei ? Bars früher zu berechnen. der andere Bezugspunkt wäre der Schnittpunkt der Verschiebung 0 y und der SignalPeriod x.

 
Wenn dies der Fall ist, sollte sich price2 in :
price2 = iMA(Symbol(),0,MAPeriod,0, MODE_SMA,PRICE_CLOSE,SignalPeriod);

Die X-Koordinate (SignalPeriod) sollte der letzte Parameter der Funktion iMA(....) sein, nicht der vierte Parameter. (4. Parameter: ma_shift ist eine andere Bedeutung, verwenden Sie es nicht, es sei denn, Sie wissen, was es ist !!!!)
Jetzt Ok, versuchen Sie es noch einmal!
 
  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;
 
Grund der Beschwerde: