Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Neuer Valerius Metatrader 4 EA (http://www.expert-advisor.com/forum/showthread.php?t=5159)

ralfbenker 14.09.16 21:59

Wieso funktioniert Shift nicht. Der Parameter Shift ist der Bar für die du den CCI berechnen willst. 0 ist der aktuelle Bar, 1 der Bar davor usw.

Die 5 Zeilen-Liste ist keine Liste sondern die Definition der Funktion iCCI.
Wenn du deinen Editor aufmachst und oben auf Hilfe klickst kommst du unter anderem zur MQL4-Referenz. Da gibst Du iCCI als Suchbegriff ein und findest ne Beschreibung der Funktion.
Oder du klickst in deinem Code mit der Maus auf die Funktion iCCI (oder was auch immer dir unklar ist) und drückst F1.
Dann geht ein Fenster auf und du bist sofort auf der Funktion/Beschreibung die du suchst.

MA-EA 17.09.16 16:02

Liste der Anhänge anzeigen (Anzahl: 2)
Lassen wir den CCI einfach erst mal aussen vor.

Kann Jemand helfen den RVI einzubaun?

Zyr 17.09.16 20:48

RVI Refernce

Bsp. RVI Main unter RVI Signal
Code:

bool rviDown (int period, int shift)
{
    return iRVI (NULL, 0, period, MODE_MAIN, shift) < iRVI (NULL, 0, period, MODE_SIGNAL, shift);
}

Der Aufruf in einer if Abfrage wäre dann z.B.:
Code:

if (rviDown(14,1))
{
  print ("RVI Main über 14 Perioden ist für die letzte abgeschlossene Kerze unter dem Signal");
}


ralfbenker 18.09.16 05:07

Da gibt's keinen Unterschied zur Funktion iCCI(). Die Verwendung der Funktion iRVI() funktioniert genauso.
double iRVI(
string symbol, // symbol
int timeframe, // timeframe
int period, // averaging period
int mode, // line index
int shift // shift
);
Beispiel:
Willst du den RVI für den aktuellen Chart im aktuellen Timeframe über 10 Perioden berechnen sieht das für den aktuellen Bar 0 so aus:

double val=iRVI(NULL,0,10,MODE_MAIN,0);

MA-EA 26.09.16 21:58

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von ralfbenker (Beitrag 35800)
Da gibt's keinen Unterschied zur Funktion iCCI(). Die Verwendung der Funktion iRVI() funktioniert genauso.
double iRVI(
string symbol, // symbol
int timeframe, // timeframe
int period, // averaging period
int mode, // line index
int shift // shift
);
Beispiel:
Willst du den RVI für den aktuellen Chart im aktuellen Timeframe über 10 Perioden berechnen sieht das für den aktuellen Bar 0 so aus:

double val=iRVI(NULL,0,10,MODE_MAIN,0);

Ist schon spät, also kurz gesagt: Der CCI wurde aber nicht auf diese
5-Zeilen Weise eingebaut. Sondern es werden die
einzelnen Elemente, die Funktionen extra aufgerufen.
Kanns nicht genau erklären, aber er wird in meinen EA
anders eingefügt als mit Deinen 5 Zeilen. Deswegen ist das schon richtig:

Code:

//CCI GV
extern string ComChaIn = "Commodity Channel Index";
extern int InpCCIPeriod = 14;
extern double indicator_level1 = -100.0;
extern double indicator_level2 = 100.0;
input ENUM_APPLIED_PRICE CCI_Price = PRICE_TYPICAL;

Code:

//CCI
{
double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1);
double IL1 = iCCI(_Symbol,_Period, indicator_level1, CCI_Price, 1);//-100
double IL2 = iCCI(_Symbol,_Period, indicator_level2, CCI_Price, 1);//+100


traderdoc 26.09.16 23:02

Zitat:

Zitat von MA-EA (Beitrag 35966)
Ist schon spät, also kurz gesagt: Der CCI wurde aber nicht auf diese
5-Zeilen Weise eingebaut. Sondern es werden die
einzelnen Elemente, die Funktionen extra aufgerufen.
Kanns nicht genau erklären, aber er wird in meinen EA
anders eingefügt als mit Deinen 5 Zeilen. Deswegen ist das schon richtig:

Code:

//CCI GV
extern string ComChaIn = "Commodity Channel Index";
extern int InpCCIPeriod = 14;
extern double indicator_level1 = -100.0;
extern double indicator_level2 = 100.0;
input ENUM_APPLIED_PRICE CCI_Price = PRICE_TYPICAL;

Code:

//CCI
{
double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1);
double IL1 = iCCI(_Symbol,_Period, indicator_level1, CCI_Price, 1);//-100
double IL2 = iCCI(_Symbol,_Period, indicator_level2, CCI_Price, 1);//+100


Nochmals, das sind die 5 Zeilen für den CCI aus der MQL4-Dokumentation:

double iCCI(
string symbol, // symbol
int timeframe, // timeframe
int period, // averaging period
int applied_price, // applied price
int shift // shift
);

Ich habe mal den 3. Parameter fett markiert. In der Doku steht da
int period // averaging period
D.h. period steht für die Periodenangabe des Indikators, also die Anzahl der Kerzen, die in die Vergangenheit betrachtet werden sollen.
1. Ist Deine Periode nicht 100 und auch nicht -100
2. Gibt es keine!!!!!! negativen Perioden (schon daran müsstest Du erkennen, dass Du auf dem Holzweg bist)

Mit double CCI = iCCI(_Symbol,_Period, InpCCIPeriod, CCI_Price, 1); wurden alle 5 Parameter (Zeilen) richtig angegeben.

Aber ich (wir) verstehe(n) nicht, warum Du es nicht begreifen willst, dass für periode nicht die Indikatorlevels eingegeben werden dürfen?

In Summe sind Deine Programmzeilen bzgl. double IL1 und double IL2 nach wie vor falsch und damit werden auch falsche Ergebnisse weiterverarbeitet.

traderdoc

MA-EA 27.09.16 09:41

Ok, wie gesagt:Vergessen wir das einfach. Ich werds später
rausfinden. Bitte lassen wir den CCI erst mal aussen vor.

Bitte helft mir jetzt, den RVI einzubauen. Bitte Bitte Bitte! :rolleyes:

Für Euch Progger muss es doch immer interessant sein, an EAs
zu basteln. ;)

traderdoc 27.09.16 09:59

Zitat:

Zitat von MA-EA (Beitrag 35970)
Ok, wie gesagt:Vergessen wir das einfach. Ich werds später
rausfinden. Bitte lassen wir den CCI erst mal aussen vor.

Bitte helft mir jetzt, den RVI einzubauen. Bitte Bitte Bitte! :rolleyes:

Für Euch Progger muss es doch immer interessant sein, an EAs
zu basteln. ;)

Da gibt es nichts später herauszufinden. Die Sachlage ist eineindeutig!
Den RVI baust Du ein, wie die Zeile des CCI bzgl. double CCI. Das wirst Du aber nur erfolgreich bewältigen, wenn die Grundlagen bei Dir angekommen sind. Und wie man aus Deinem letzten Post erlesen kann, sind die noch nicht angekommen.

Deine Vorgehensweise und Renitenz schreckt aber inzwischen alle Programmierer ab. Und wer ernsthaft programmiert, der bastelt nicht.

traderdoc

ralfbenker 27.09.16 11:35

@MA-EA was ist da so schwer zu verstehen. Diese "vermeintlichen" 5 Zeilen sind nur eine Zeile im Programmcode:

double iRVI(
string symbol, // symbol
int timeframe, // timeframe
int period, // averaging period
int mode, // line index
int shift // shift
);

Dies ist nichts weiter als die Beschreibung der Funktion iRVI mit der Erläuterung der erforderlichen Parameter.

Im Programmcode schreibt man das dann natürlich so:

double iRVI(symbol,timeframe,period,mode,shift);

und genauso geht das bei der Funktion iCCI. In der mql-Referenz ist auch genau festgelgt, an welcher Stelle welche Variable stehen muss !!

Zyr 27.09.16 14:19

@MA-EA

Die Zeilen double IL1 und double IL2 mußt du ersetzen
Mit z.B.:
Code:

bool IL1 ()
{
return CCI < IndicatorLevel1;
}
bool IL2 ()
{
return CCI > IndikatorLevel2;
}

Sonst macht dein Code nicht das was du willst.
Die Levels sind nicht Bestandteil der Rückgabe iCCI(...)
iCCI gibt nur den Datentyp double auf Grundlage der von dir übergebenen Variblen zurück. Bei einer Period die in der Zukunft liegt (Periodenwerte < 0) ist es nichts.

Das selbe wirst du mit iRVI haben deshalb ist es wichtig zu verstehen was hier passiert.


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:32 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum