Ich schreibe Indikatoren, EAs, nicht mehr umsonst :) - Seite 6

 
KimIV >> :
Falsche Funktionsparameter. Prüfen Sie genau, was Sie der Funktion OrderClose() übergeben.

Ich habe es überprüft... Ich weiß wirklich nicht, wo das Problem liegt... Ich habe so viele Dinge ausprobiert %(

 

Nochmals guten Abend :)

Mit einer neuen Anfrage. Mir ist klar geworden, dass ich es ohnehin nicht allein herausfinden kann.

Ich bitte darum, einen EA zu schreiben, der auf dem WATR-Indikator basiert (EA-Code unten). Wenn der Indikator eine Wendung macht, schließt er den offenen Auftrag (wenn er nicht durch SL oder TP geschlossen wurde) und eröffnet einen neuen Auftrag in der vom Indikator angezeigten Richtung. Wir eröffnen nur einen Auftrag genau am Umkehrpunkt. Dann warten wir auf die nächste Umkehrung des EA.

Eingabeparameter: Losgröße, SL, TP, Slippage. Ich glaube, ich habe nichts vergessen :)

Herzliche Grüße, Svetlana. ICQ 320355718

Code des Indikators:

//+------------------------------------------------------------------+
//| WATR.mq4
//| Geschrieben von WizardSerg unter Artikel konkop in
//| "Moderner Handel" #4/2001 |
//| http://www.wizardserg.inweb.ru |
//| wizardserg@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Geschrieben von WizardSerg unter Artikel konkop in <Modern trading> #4/2001"
#property link "http://www.wizardserg.inweb.ru"
//----
#property indicator_chart_window
#Eigenschaft indicator_buffers 2
#Eigenschaft indicator_color1 Coral
#property indicator_color2 DodgerBlue
//---- Eingabeparameter
extern inttern WATR_K = 10;
extern double WATR_M = 4.0;
extern inttern ATR = 21;
//---- Puffer
double ExtMapBufferUp[];
double ExtMapBufferDown[];
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int init()
{
IndikatorPuffer(2);
SetIndexBuffer(0, ExtMapBufferUp);
ArraySetAsSeries(ExtMapBufferUp, true);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(1, ExtMapBufferDown);
ArraySetAsSeries(ExtMapBufferDown, true);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName("WATR(" + WATR_K + ", " + WATR_M + ")");
SetIndexLabel(0, "WATR_Up");
SetIndexLabel(1, "WATR_Dn");
zurück(0);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
zurück(0);
}
//+------------------------------------------------------------------+
Benutzerdefinierte Indikatorfunktion //|
//+------------------------------------------------------------------+
bool AntiTrendBar(int i)
{
bool res = (TrendUp(i) && (Close[i] < Open[i]) ||
(!TrendUp(i) && (Close[i] > Open[i]);
return(res);
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikatorfunktion
//+------------------------------------------------------------------+
double CalcIndicValue(int i, bool trend)
{
double res = Close[i];
if(Trend)
res -= (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i))
sonst
res += (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i));
return(res);
}
//+------------------------------------------------------------------+
Benutzerdefinierte Indikatorfunktion //|
//+------------------------------------------------------------------+
bool TrendUp(int i)
{
return((Close[i+1] > ExtMapBufferUp[i+1]) &&
(ExtMapBufferUp[i+1] != EMPTY_VALUE))
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
int start()
{
int-Grenze;
int counted_bars = IndicatorCounted();
//---- wird der letzte gezählte Balken neu errechnet
//---- erster Indikatorwert == Preis-1 Punkt,
//das heißt, sie geht davon aus, dass der Trend nach oben geht
ExtMapBufferUp[Bars] = Close[Bars] - WATR_K*Point;
// Grenze = (gezählte Balken > 0) ? (Balken - gezählte_Balken) : (Balken - 1);
Grenze = Balken - gezählte_Balken;
//---- Hauptschleife
for(int i = limit; i >= 0; i--)
{
if(AntiTrendBar(i))
{
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
}
sonst
{
if(TrendUp(i))
{
ExtMapBufferUp[i] = CalcIndicValue(i, true);
if(ExtMapBufferUp[i] < ExtMapBufferUp[i+1])
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = EMPTY_VALUE;
}
sonst
{
ExtMapBufferDown[i] = CalcIndicValue(i, false);
if(ExtMapPufferDown[i] > ExtMapPufferDown[i+1])
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
ExtMapBufferUp[i] = EMPTY_VALUE;
}
}
// Kreuzungspreis
if(TrendUp(i) && (Close[i] < ExtMapBufferUp[i])
{
ExtMapBufferDown[i] = CalcIndicValue(i, false);
ExtMapBufferUp[i] = EMPTY_VALUE;
}
if((!TrendUp(i)) && (Close[i] > ExtMapBufferDown[i])
{
ExtMapBufferUp[i] = CalcIndicValue(i, true);
ExtMapBufferDown[i] = EMPTY_VALUE;
}
}
zurück(0);
}
//+------------------------------------------------------------------+



 
rusmos писал(а) >>

Entschuldigen Sie, aber könnten Sie bitte einen Code für das folgende Problem schreiben - das erste Los ist z.B. 0,1, und jedes weitere Los wird um einen bestimmten, vorgegebenen Wert erhöht.

Ich danke Ihnen im Voraus.

Suchen Sie dieses Forum, wie bereits gefragt und geschrieben...

Auf jeden Fall gibt es etwas Ähnliches...

 
StatBars >> :

Suchen Sie in diesem Forum, es wurde schon gefragt und darüber geschrieben...

Danke >> Ich stöbere jetzt seit etwa drei Stunden im Forum herum, habe viel gefunden, aber das nicht.

 
StatBars >> :

Suchen Sie in diesem Forum, es wurde schon einmal gefragt und geschrieben...

Und der Code umfasst wahrscheinlich höchstens 10 Begriffe.

Aber ich nehme an, dass sie sich hier nicht für Kleinigkeiten interessieren.

 
rusmos >> :

Und der Code umfasst wahrscheinlich höchstens 10 Begriffe.

Aber ich schätze, dass Fachleute sich hier nicht für Kleinigkeiten interessieren.

Es wäre schön, die Aufgabe nicht nur annähernd, sondern konkret zu formulieren, damit sich jemand darum kümmert.

 
rusmos писал(а) >>

Und der Code umfasst wahrscheinlich höchstens 10 Begriffe.

Aber die Profis kümmern sich hier wahrscheinlich nicht um die kleinen Dinge.

Bitte formulieren Sie Ihre Frage richtig. Der erste Auftrag, die folgenden. Woher stammt die erste? Seit dem Beginn des Universums oder seit dem Tag, an dem Christus kam, oder seit der Erschaffung der Welt, oder vielleicht seit dem Moment, an dem Sie gefrühstückt haben und spazieren gegangen sind? Was sind die Fragen, was sind die Antworten.

 
rusmos писал(а) >>

Und der Code umfasst wahrscheinlich höchstens 10 Begriffe.

Aber ich schätze, dass sie sich hier nicht für die kleinen Dinge interessieren.

extern double RISK=20;


lotsize=MarketInfo(Symbol(),MODE_LOTSIZE)*0.01;
Balance=AccountBalance()*( RISK/100);
lots=NormalizeDouble( Balance/ lotsize,2); // - это и есть лот для открытия позиции
Der Code erhöht nicht nur die Menge, sondern verringert sie auch, es hängt alles vom Depot ab, das Depot steigt - die Menge steigt... Ich dachte, du brauchst das...
 
sol >> :

Es wäre schön, die Aufgabe nicht nur annähernd, sondern konkret zu formulieren, damit sich jemand darum kümmert.

GUT. Das erste Los ist Kaufen mit Los 0.1. Als Reaktion darauf wird der SellStop sofort auf 20 Punkte von unten mit 0,2 Lot gesetzt (d.h. Erhöhung um 0,1)

Wenn der Verkauf ausgelöst wurde, setzen wir in der Antwort den Bystop mit 0,3 Lot (d.h. wir erhöhen das LAST Lot wieder um 0,1) und im Prinzip so und so.

Es ist wichtig, dass der Umfang der Erhöhung der Menge nach Ihrem Ermessen angepasst wird.

Nun, das sind zwei interessante Optionen. Addition und Multiplikation.

>> Ich glaube, das war's.)

 
StatBars >> :
Der Code erhöht nicht nur die Menge, sondern senkt sie auch, es hängt alles vom Depot ab, das Depot steigt - die Menge steigt... Ich dachte, du brauchst das...

Die Höhe der Kaution spielt keine Rolle.

Grund der Beschwerde: