[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 647

 
Mathers:

richtig.
 
Guten Tag Forum Mitglieder. Gefunden einen interessanten Code für die Konstruktion einer Trendlinie. Und beschlossen, mit ihm ein wenig zu spielen - das würde die Trendlinie nicht in Punkten zeichnen, aber in Prozent, aber aus irgendeinem Grund - nach meiner Fertigstellung Revolver stoppt Zeichnung Geschichte - nur die letzten drei Bars (oder vielmehr, wenn Sie den Revolver laufen, die Trendlinie zeichnet es seit Start normal, aber sobald Sie klicken, um Revolver zu aktualisieren -OK Eigenschaften setzt Geschichte). Was habe ich falsch gemacht?
Ich habe den untenstehenden Code gezeichnet. Kann mir jemand sagen, was das Problem ist - das fettgedruckte Fragment?
Das Problem ist, dass der Indikator die Historie sofort rückwärts zeichnet und sie nach einer Änderung der Parameter nicht zurücksetzt.
#property indicator_separate_window
#Eigenschaft indicator_buffers 1
#property indicator_color1 LimeGreen

doppelte AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
//---- Indikatoren

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexPuffer(0,Idx);

//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Funktion zur Deinitialisierung des Custor-Indikators |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(gezählte_Balken>0) gezählte_Balken--;
int limit=Bars-counted_bars;
for(int i=limit; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta);

//if (Curency =="AUDUSD")
Idx[i] = AUD;



}

//----

//----
zurück(0);
}
//+------------------------------------------------------------------+
 
Lonely_man:
Guten Tag, liebe Forumsmitglieder, ich habe einen interessanten Code für die Erstellung einer Trendlinie gefunden. Ich habe beschlossen, ein wenig damit zu spielen.

Aus irgendeinem Grund wurde ich an eine Anekdote erinnert: In der Familie eines Programmierers kommt ein Sohn zu seinem Vater und fragt, warum die Sonne im Osten aufgeht und im Westen untergeht.

Papa, ohne den Blick von seinem Computer zu nehmen: Geht er wirklich im Osten auf? -Ja. -Und es geht im Westen unter? - Ja. Also, was, jeden Tag? - Ja. Nun, fassen Sie nichts an, wenn es funktioniert.

 
Roger:

Aus irgendeinem Grund wurde ich an eine Anekdote erinnert: In der Familie eines Programmierers kommt ein Sohn zu seinem Vater und fragt, warum die Sonne im Osten aufgeht und im Westen untergeht.

Papa, ohne den Blick von seinem Computer zu nehmen: Geht er wirklich im Osten auf? -Ja. -Und es geht im Westen unter? - Ja. Also, was, jeden Tag? - Ja. Wenn es funktioniert, müssen Sie nichts anfassen.

:))
 
Lonely_man:
Hallo Forumsnutzer, ich habe einen interessanten Code zum Zeichnen der Trendlinie gefunden.

Wissen Sie, was komisch ist? Sie haben den Kodex nach Ihren Prinzipien geändert und wollen, dass eine Brigade von Gelehrten Fehler findet.

und Sie versuchen einfach, die Informationen auszugeben, die Sie im Kommentar erhalten möchten? es ist möglich, dass alles funktioniert, aber Sie erhalten die Daten, die nicht zum aktuellen Preis, sondern irgendwo am unteren Rand des Diagramms angezeigt werden - ich denke, es ist die separatetwinds

SZS viel Glück

 
IgorM:

Wissen Sie, was lustig ist? Sie haben den Code nach Ihren Prinzipien geändert und wollen, dass eine Brigade von Gelehrten Fehler findet.

und Sie versuchen einfach, die Informationen auszugeben, die Sie im Kommentar erhalten möchten? es ist möglich, dass alles funktioniert, aber Sie erhalten die Daten, die nicht zum aktuellen Preis, sondern irgendwo am unteren Rand des Diagramms angezeigt werden - ich denke, es ist die separatetwinds

SZS viel Glück

Ich weiß von den Trennungen - ich weiß, sie werden in einem separaten Fenster gezeichnet, es geht nicht um sie. Ich kann nicht sehen, was mit diesem Code passieren wird - anscheinend wird diese Berechnungsmethode nicht für Zinsen funktionieren ((.

Aus irgendeinem Grund erinnere ich mich sofort an einen Witz: Der Sohn eines Programmierers kommt zu seinem Vater und fragt, warum die Sonne im Osten aufgeht und im Westen untergeht?

Papa, ohne den Blick von seinem Computer zu nehmen: Geht er wirklich im Osten auf? -Ja. -Und es geht im Westen unter? - Ja. Also, was, jeden Tag? - Ja. Wenn es funktioniert, müssen Sie nichts anfassen.

))) Ein Tipp: Ich brauche es für den Cross-Currency-Handel - die Veränderung in Pips gegenüber dem Dollar des GBP oder JPY geben keine vollständige Information darüber, welches der beiden Währungen im Preis gegenüber der anderen gefallen ist, aber ihre prozentuale Veränderung gegenüber dem Dollar zeigt alles deutlich - als zusätzliches Werkzeug ist das sehr nützlich.
 
Mathers:
Ich danke Ihnen. Ich schätze, der einzige Unterschied ist, dass der EA jedes Mal gestartet wird, wenn ein neuer Tick eintrifft, während das Skript in einer Endlosschleife gestartet werden muss, damit es weiterläuft?


Nicht unbedingt. Das hängt ganz vom Zweck des Drehbuchs ab. Wenn das Skript für einen einmaligen Durchlauf gedacht ist (was in den allermeisten Fällen der Fall ist), besteht keine Notwendigkeit, Endlosschleifen zu erfinden. Ein Beispiel für ein solches einmaliges Skript ist die Berechnung des Geldbetrags, der auf den Markt gebracht werden muss, wenn eine Position mit einem voreingestellten Lot eröffnet wird. Da der Mindestpreis für die verschiedenen Instrumente unterschiedlich ist, ist es einfacher, das gewünschte Instrument zu öffnen, das Skript darauf anzuwenden, das gewünschte Lot in das Parameterfenster einzugeben und zu sehen, wie viel Geld blockiert wird, wenn der Handel eröffnet wird.

Dies ist nur ein Beispiel. Der Zweck der Skripte kann unterschiedlich sein.

 
Lonely_man:

Ich bin mir der Trennung bewusst - ich weiß, es ist in einem separaten Fenster, es geht nicht darum. Ich sehe nicht, wie dieser Code funktionieren wird - anscheinend wird diese Methode der Prozentberechnung nicht funktionieren((.

Aus irgendeinem Grund fällt mir sofort eine Anekdote ein: Ein Sohn in einer Familie von Programmierern kommt zu seinem Vater und fragt, warum die Sonne im Osten aufgeht und im Westen untergeht?

Papa, ohne den Blick von seinem Computer zu nehmen: Geht er wirklich im Osten auf? -Ja. -Und es geht im Westen unter? - Ja. Also, was, jeden Tag? - Ja. Wenn es funktioniert, müssen Sie nichts anfassen.

))) Der Tipp: Ich brauche ihn für den Handel mit anderen Währungen - Pips zum Dollar für GBP oder JPY geben keine vollständige Information darüber, welche der beiden Währungen im Preis gegenüber der anderen gefallen sind, aber ihre prozentuale Veränderung gegenüber dem USD zeigt alles klar an - als zusätzlicher Indikator ist er sehr nützlich.

Es ist ein ziemlich einfacher Indikator. Ich verstehe nicht, wie Prozentwerte besser sein sollen als Pips, aber egal.

Sie haben allerdings einige Fehler gemacht :)

1.

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

Um den Prozentsatz korrekt zu berechnen, müssen Sie Klammern hinzufügen.

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

2.


Das Problem besteht darin, dass der Indikator den Verlauf sofort rückwärts zeichnet und ihn nach einer Änderung der Parameter nicht zurücksetzt.

Das Interessanteste daran ist, dass es das sportliche Interesse geweckt hat und eine halbe Stunde lang auf Ihrem Anzeiger saß.

Warum wurde die Geschichte nicht berechnet?
Die Antwort ist, dass Sie eine Divisionsoperation hinzugefügt haben.

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

Die Tatsache, dass die Funktion iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE ,i+Delta) gleich zu Beginn der Geschichte 0 zurückgibt, wurde nicht berücksichtigt. Und Sie wurden mit Fehler 4013 (ERR_ZERO_DIVIDE) "rausgeschmissen", als Sie versuchten, durch 0 zu dividieren, prüfen Sie das Protokoll.

Sie können eine weitere Prüfung in die FOR-Schleife einfügen.

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

Und alles wird gut werden. Nachstehend ist meine Variante aufgeführt.

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| 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;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+


 

#Eigenschaft indicator_color1 Weiß

Ist es möglich, diesen Parameter programmatisch im Modul start() zu ändern?

Ist es z.B. möglich, die für den Puffer eingestellte Farbe im Laufe des Programms zu ändern?



 
valenok2003:

#Eigenschaft indicator_color1 Weiß

Ist es möglich, diesen Parameter programmatisch im Modul start() zu ändern?

Ist es z.B. möglich, die für den Puffer eingestellte Farbe im Laufe des Programms zu ändern?




Das glaube ich nicht. Und warum sollte das so sein?