Indikator Frage - Seite 4

 
SDC:

Oder vielleicht so etwas wie das?

Sie sollten wirklich IndicatorCounted() verwenden, denn wenn Sie es so machen, zeichnet Ihr Indikator all diese Objekte bei jedem neuen Tick neu, anstatt sie alle nur einmal zu zeichnen und neue hinzuzufügen, wenn neue Balken gebildet werden

Dies und Ihr anderer Beitrag über externe Bools bringt mich auch auf einige andere Ideen, danke

Mein Fokus muss breiter gefächert sein, aber weil ich NooB bin, neige ich dazu, mich auf einen Teil des Codes zu konzentrieren und andere wie die Externals zu vernachlässigen.
Ich bin nur jetzt immer in die Arrays und hatte einen großen Kampf, die Puffer zu verstehen, aber beginnen, dass jetzt vor kurzem vorbei zu bekommen.

Danke, das wird mir jetzt auch einen Haufen neuer Ideen geben.
 
SDC:


Wenn Sie einen Indikator erstellen, wenden Sie Ihren Code auf jeden einzelnen Balken des Charts an. Das bedeutet, dass Sie den Macd-Indikatorwert so abrufen müssen, wie er für jeden einzelnen dieser historischen Balken war.

in Ihrem ursprünglichen Code haben Sie das getan:

Der letzte Parameter 1 ist der Wert des macd, wie er bei Balken 1 des Charts war, dem Balken vor dem aktuellen Balken, der als Balken 0 indiziert ist

Offensichtlich wollen Sie nicht diesen einen Wert des macd in Ihrem bedingten Operator über den gesamten historischen Chart verwenden.

Sie müssen den macd mit dem gleichen Bar-Index wie jeder Bar indexieren, so dass Sie z.B. bei Bar 500 folgendes benötigen

Der letzte Parameter muss sich ändern, damit er mit der Bar-Nummer übereinstimmt, auf die Ihr Indikator seine Algorithmen anwendet.

Das ist der Grund, warum Sie ihn innerhalb der Schleife benötigen, damit Sie den Schleifenzyklus-Iterator für den letzten Parameter verwenden können, damit Sie Ihren Macd-Wert so erhalten, wie er für jeden Balken des historischen Charts war.

Ich hoffe, das hilft, die Dinge ein wenig zu klären.

Richtig, das habe ich herausgefunden.

Wenn ich jedoch die Codes wie if(val1 > 0 && faster > slower) hinzufüge, würde das nicht funktionieren, wenn ich faster und slower außerhalb der Schleife deklariere.

AHHHHH Ich sehe also, weil die Verschiebung (i) ist, dann brauche ich es innerhalb der Schleife OOOOPPPS LOL
 
Agent86:
Warum for(int i = Bars-1 ? <----------------------- Bars werden wie Arrays indiziert, der erste Bar=0, statt 1. Der letzte Bar ist also Bars-1;

Und warum ist das besser als for(int i = Bars ?? <----- siehe oben.

Bitte beraten Sie danke


Außerdem:

Ich gehe davon aus, dass dies für alle gilt, und nicht nur für Indikatoren / benutzerdefinierte Indikatoren ?<--- was ich und WHRoeder: diskutiert haben, sind ziemlich allgemeine Angelegenheiten. Nichts spezifisches. Wir haben uns nur über die Deklaration von Variablen und deren Zuweisungen usw. in Bezug auf Schleifen unterhalten.

 
diostar:

Auch:


for(int i=Bars; i>=0; i--) ist der von mir verwendete Code

for(int i=Bars-1; i>=0: i--) wird vorgeschlagen

Ich dachte, dass Bars = Anzahl der Bars im aktuellen Chart ist ? zumindest laut Wörterbuch.

Also --i Ich dachte, dass es von der höchsten Taktnummer wie 1002 oder so runterzählt und --i bis tatsächlich -1 runterzählt.
Weil while i>=0, also sollte es bis tatsächlich -1 herunterzählen, bevor es falsch wird. Wenn es 0 oder größer wäre, würde es wahr werden und ein letztes Mal eine Schleife durchlaufen, bis es -1 erreicht.

Zumindest dachte ich, dass es so funktioniert? Liege ich falsch?

Wenn i=0 und ++i und hochgezählt wird, dachte ich, es würde bis zum Ende des letzten Taktes zählen.

Aber in diesem Fall wäre Balken-1 nicht wirklich alle geschlossenen Balken, sondern schließt den Balken[0] ein, der noch nicht geschlossen ist oder so?

Ich bin mir nicht ganz sicher, ob ich den Unterschied zwischen Bars-1 und Bars verstehe. Hat es etwas mit dem aktuellen Bar 0 zu tun, der nicht gezählt wird, wenn man sich einfach auf Bars bezieht?

Bitte um Ratschläge Danke


 

Ja, weil Sie einen Balken 0 haben, also gibt Bars Ihnen die Anzahl der Balken im Diagramm einschließlich Balken 0.

Betrachten Sie also ein kleines Diagramm, das nur 2 Balken enthält, nämlich Balken[0] und Balken[1].

Bars gibt die Anzahl der Balken an, also Bars == 2

wenn Sie Ihren Indikator ab dem letzten Balken im Diagramm anwenden möchten

Sie könnten es mit i=Bars versuchen.

Wie wir wissen, ist Bars = 2, aber es gibt keinen Bar, der als bar[2] indiziert ist, der letzte Bar ist Bar[1]

Sie müssen also i=Bars-1 verwenden.

 
Agent86:
for(int i=Bars; i>=0; i--) ist der Code, den ich verwendet habe<--- sagen wir, für z.B. Close[i], zählt dies von close[Bars] bis zu close[0]. Wenn i=Bars, existiert close[i]?

for(int i=Bars-1; i>=0: i--) wird vorgeschlagen<--- z.B. Close[i], dies zählt von close[Bars-1] abwärts bis close[0]. Wenn i=Bars-1, existiert close[i]?

Ich dachte, dass Bars = Anzahl der Bars im aktuellen Chart ist ? zumindest laut Wörterbuch. <---ok

So --i Ich dachte, wurde von der Höchsten Bar-Nummer wie 1002 oder etwas und zählen --i nach unten zu tatsächlich -1 Does close[1002], close[-1] existieren?
Denn solange i>=0 ist, sollte es bis tatsächlich -1 herunterzählen, bevor es falsch wird. Wenn es 0 oder größer wäre, wäre es wahr und würde ein letztes Mal eine Schleife durchlaufen, bis es -1 erreicht <---- bei close[-1] gibt es 0 zurück. Nicht falsch

Zumindest dachte ich, dass es so funktioniert ? Liege ich falsch ? <--- siehe unten ref.

Wenn i=0 und ++i und hochgezählt wird, dann dachte ich, es würde bis zum Ende des letzten Bars zählen. <--- das wird es gehorsamst tun.

Aber in diesem Fall wären die Bars-1, die du meinst, nicht wirklich alle geschlossenen Bars, sondern umfassen auch die Bar[0], die noch nicht geschlossen ist oder so... <--- in diesem Fall wird der Schlusskurs den aktuellen Bid-Tick-Preis zurückgeben

Ich bin mir nicht ganz sicher, ob ich den Unterschied zwischen Bars-1 und Bars verstehe. Hat es etwas mit dem aktuellen Bar 0 zu tun, der nicht gezählt wird, wenn man sich einfach auf Bars bezieht? <--- siehe unten ref

Bitte um Ratschläge Danke





double Close[]
Serien-Array, das die Schlusskurse für jeden Balken des aktuellen Charts enthält.

Die Elemente des Serien-Arrays werden in umgekehrter Reihenfolge indiziert, d.h. vom letzten zum ersten. Der aktuelle Balken, der der letzte im Array ist, hat den Index 0. Der älteste Balken, der erste im Diagramm, hat den Index Balken-1.
 
Ich verstehe, aus irgendeinem Grund dachte ich, dass der Puffer dieses Thema ein wenig anders behandelt, weil ich technisch nicht einmal die Anzahl der Elemente im Array deklarieren, so dass ich dachte, dass der Puffer dies bereits bearbeitet.

Wie auch immer, ich verstehe das und es macht Sinn, danke

 
Agent86:
Verstehe, aus irgendeinem Grund dachte ich, dass der Puffer dieses Thema etwas anders handhabt, weil ich technisch gesehen nicht einmal die Anzahl der Elemente im Array deklariert habe, so dass ich dachte, dass der Puffer dies bereits ausgearbeitet hat.

Jedenfalls verstehe ich das und es macht Sinn, danke



Was? Mir war nicht klar, dass Sie sich tatsächlich auf Indikatorpuffer beziehen. Jetzt, wo ich es weiß, lese ich diese Referenzen aus: https://www.mql5.com/en/articles/1500

(1) Indikatorpuffer & Benutzerarrays - sie sind beide gleich und UNTERSCHIEDLICH. & Der Grund, warum Indikatorpuffer nicht vom Benutzer dimensioniert werden, hat nichts damit zu tun, dass sie bereits ausgearbeitet sind. siehe unten:

double ExtMapBuffer1[];

Dies ist ein gewöhnliches Array. Aber die Dimensionalität wird nicht angegeben und die Initialisierung wird nicht durchgeführt. Dieses Array wird später als Datenpuffer eingerichtet.

(2) Indikatorpuffer am Ausgang und am Eingang (der Datenpuffer oben) können gleich aussehen, sind aber unterschiedlich.

SetIndexBuffer(0,ExtMapBuffer1);

Diese Funktion "bindet" ein Array an eine Puffernummer. Das heißt, sie zeigt an, dass der Puffer mit der angegebenen Nummer das angegebene Array zum Speichern von Daten verwenden wird. Wenn Sie also die Elemente dieses Arrays ändern, ändern Sie den Wert des Puffers. Eigentlich ist ein Array ein Datenpuffer.Das erste Argument ist der Name des Arrays, das gebunden werden soll.


Sie sehen, es funktioniert alles. Sehen wir uns nun an, was der Code macht:

for(int i=0;i<Bars;i++)

Wir verwenden den Zyklus für, um alle Elemente des Datenpuffers durchzugehen. Da jedem Element des Puffers ein bestimmter Balken entspricht, verwenden wir den Zyklus, beginnend mit dem Null-Balken (dem letzten verfügbaren) und endend mit dem ersten verfügbaren, der in der Folge um einen weniger ist als die Variable Balken (weil wir die Balken von Null an zählen).

{
   ExtMapBuffer1[i]=MathRand()%1001;
}

Bei jeder Iteration wird ein Zähler um eins erhöht, und wir bewegen uns vom letzten verfügbaren Balken zum ersten , wobei wir jedem Pufferelement (das einem bestimmten Balken entspricht) eine Zufallszahl von 0 bis 1000 zuweisen. Wenn es für Sie schwierig ist zu verstehen, wie ein bestimmtes Pufferelement einem bestimmten Takt entspricht, versuchen Sie, den Zyklus auf folgende Weise zu ändern und sehen Sie sich das Ergebnis im Terminal an:

for(int i=0;i<Bars;i++)
{
   ExtMapBuffer1[i]=i;
}



 
diostar:

double Close[]
Serien-Array, das die Schlusskurse für jeden Balken des aktuellen Diagramms enthält.

Die Elemente des Serien-Arrays werden in umgekehrter Reihenfolge indiziert, d.h. vom letzten zum ersten Balken. Der aktuelle Balken, der der letzte im Array ist, hat den Index 0. Der älteste Balken, der erste im Diagramm, hat den Index Bars-1.

Ok, ich glaube, ich verstehe das jetzt, danke
 
Vielen Dank an alle

Wie ich mehr über Indikatoren zu lernen scheint es, dass das Design, das ich verwenden würde nicht sehr nützlich für den Einsatz in einem EA, sondern nur vielleicht gut für visuelle und / oder manuelle Verwendung.

Da der Zähler zählt nach unten 1-- es scheint, dass mit dieser Methode wäre nicht gut, um alle Array-Objekte für den Einsatz im Handel zu verweisen, es sei denn, vielleicht ich nur auf eine bestimmte shift[i] in diesem Fall müsste ich herausfinden, wie speziell auf nur die Array-Elemente, die ich für ein Handelssignal an nur diese bestimmten Bars verwenden möchten verweisen.

Die Verwendung in der jetzigen Form würde wahrscheinlich dazu führen, dass der Handel auf dem gesamten Chart stattfindet, genau wie der Indikator.

Jetzt werde ich wohl lernen, wie man sich auf verschiedene Array-Elemente in einem Indikator bezieht, um auf diese Werte/Zeiten/Balken usw. zu verweisen.

Vielen Dank an alle für die Hilfe, und dies wird mir eine Menge zum Nachdenken darüber, wie ich könnte iCustom Indikatoren erstellen und machen sie nützlich in einem EA
Grund der Beschwerde: