Wie programmiert man? - Seite 233

 
CoeyCoey:
Hallo zusammen,

Ich arbeite daran, eine Währungsstärkeanzeige zu modifizieren, um die Stärke der Währung basierend auf der Zeit des Charts anzuzeigen. Zurzeit ist der Code verwendet:

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Soweit ich weiß, liefern MODE_HIGH und MODE_LOW die Höchst- und Tiefstwerte des aktuellen Tages. Wie könnte ich stattdessen die Höchst- und Tiefstwerte des aktuellen Zeitrahmens des Charts abrufen?

Vielen Dank!

P.S. Ich bin kein Programmierer, also bitte kleine Worte verwenden:)

Sie müssen MarketInfo() nicht verwenden. Wenn Sie das aktuelle Hoch erhalten möchten, verwenden Sie High[0] und Low[n], Close[n], Open[n]. n' steht für den Abstand zum aktuellen Balken. Um zum Beispiel das Hoch des Leistens vor dem aktuellen Leisten zu erhalten, können Sie High[1] verwenden, da der aktuelle Leisten 0 ist und der Leisten davor einen Offset von 1 zum aktuellen Leisten hat.

Um die Hochs, Tiefs, Eröffnungen und Schließungen anderer Zeitrahmen zu ermitteln, können Sie die Funktionen iHigh(), iLow(), iClose() und iOpen verwenden.

Beispielhafte Verwendung unten.

double high_of_gbpusd_4hours_current = iHigh("gbpusd", period_h4, 0);

 

Danke! Ihr Jungs rockt!

 
mfurlend:

Ich glaube, ich habe es ziemlich viel arbeiten (nicht sicher??), aber aus irgendeinem Grund das Array wird mit einer Menge von '0' Werte zusammen mit den legitimen Werten gefüllt.

So würde ich es machen:

#define TICKET 0

#define PRICES 1

double ResumeArray[0,2];

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

bool success = false;

int k;

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

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;

if (OrderType() > OP_SELL || OrderProfit()> Cutoff)continue;

int arraycount=ArrayRange(ResumeArray,TICKET);

bool found = false;

for (k=arraycount-1; k>=0; k--)

{

if (ResumeArray[k,TICKET] == OrderTicket())

{

found = true;

if (ResumeArray[k,PRICES] + Cutoff < OrderProfit())break;

else

{

success=true;

Print ("ELSE");

ResumeArray[k,PRICES] = OrderProfit();

break;

}

}

}

if (found == false)

{

arraycount = ArrayResize(ResumeArray,arraycount+1)/2;

ResumeArray[arraycount-1,TICKET] = OrderTicket();

ResumeArray[arraycount-1,PRICES] = OrderProfit();

success=true;

}

}

if(success)return (1);

else return(0);

}

Sie müssen die Definitionen TICKET und PRICES nicht verwenden, ich habe sie nur eingefügt, um zu zeigen, wie ein 2-dimensionales Array funktioniert. Ersetzen Sie einfach alle Vorkommen von TICKET und PRICES durch 0 bzw. 1.

Ich habe die 'return'-Befehle in der 'for'-Schleife durch 'break' ersetzt, so dass alle offenen Aufträge verarbeitet werden.

Zu beachten ist, dass geschlossene Aufträge nie aus dem Array entfernt werden, so dass es immer größer wird und Ihre Plattform verlangsamt.

d4v3

 

Begrenzung der Balkenhistorie

Ich wäre sehr dankbar, wenn jemand dem RenkoLiveChart_v3.2 Skript die Option "Bars Limit" hinzufügen könnte.

Es nimmt zu viel Computer-Ressourcen.

Dateien:
 

Basic Alerting EA

................[gelöst] ....................

 

Rauschunterdrückung

Hallo zusammen - Ich habe nach einer Möglichkeit gesucht, das Rauschen bei einem Handel zu begrenzen und einen schnelleren Cutoff zu machen

Die Idee ist eigentlich ganz einfach

das Rauschen wird in diesem Bild gezeigt, es ist dynamisch, d.h. es ändert sich ständig, um den Marktbedingungen zu entsprechen

Hier ist ein Code, den ich für den Abschluss erstellt habe, wenn ihn jemand verwenden möchte, muss er nur noch mit einigen Multiplikatoren versehen werden.

int profit = OrderProfit() + OrderSwap() + OrderCommission();

int Trades = ScanTrades(0,0);

wenn (Trades == 0) TS1 = 0;

if ((ScanTrades(2,0) > 0) && (Gewinn < 0)) TS= ((MarketInfo(Symbol(),MODE_BID)) + Rauschen + Slippage);

if ((ScanTrades(2,0) > 0) && (Gewinn > 0)) TS= ((MarktInfo(Symbol(),MODE_BID)) + Rauschen );

if ((ScanTrades(1,0) > 0) && (Gewinn < 0)) TS= ((MarktInfo(Symbol(),MODE_BID)) - noise - Slippage);

if ((ScanTrades(1,0) > 0) && (Gewinn > 0)) TS= ((MarktInfo(Symbol(),MODE_BID)) - Rauschen );

//short

if ((ScanTrades(2,0) > 0)&& (TS1 ==0 )) TS1 = TS;

wenn ((ScanTrades(2,0) > 0)&& (TS < TS1)) TS1 = TS;

if ((ScanTrades(2,0) > 0) && (MarketInfo(Symbol(),MODE_BID) > TS1)) CloseOrder(2);

//Lang

wenn ((ScanTrades(1,0) > 0)&& (TS1 ==0 )) TS1 = TS;

wenn ((ScanTrades(1,0) > 0)&& (TS > TS1)) TS1 = TS;

if ((ScanTrades(1,0) > 0) && (MarketInfo(Symbol(),MODE_BID) < TS1)) CloseOrder(1);

Was wäre der beste Weg, um den aktuellen und den vorherigen Höchst- und Tiefstwert aus einem Balkendiagramm zu erhalten? Ich muss die Variable "noise" erstellen.

Ich habe versucht, ths aber seine hit and miss t1 und l1 sind manchmal 0 seine deprimierendsten wie seine alles, was steht zwischen der ganzen ea wird "fertig", wenn es jemals so etwas gibt.

double hh2=Hoch;

double ll2=Low;

double hh3=Hoch;

double ll3=Low;

double t1,l1,noise;

//Rauschen = Überlappung der vorherigen Takte

wenn ((hh2 - hh3) > 0 ) t1 =(hh3); //grundsätzlich wird der niedrigste "hohe" Balken zwischen den beiden ausgewählt -bullisch

wenn ((hh3- hh2) > 0 ) t1=(hh2); //bärisch

wenn ((ll2 - ll3) > 0 ) l1 =(ll2); //Auswahl des höchsten Tiefstkurses bullish

wenn ((ll3-ll2) > 0 ) l1=(ll3); //bärisch

Rauschen =(t1-l1);

Print("t1 = ",t1,"; l1 = ",l1);

die typischen Ergebnisse der Druck sind t1=0 l1=94.3 seine ärgerlichsten, weil hh2 und hh3 sind == ich weiß einfach nicht, was zu tun ist ich kann nicht sehen, ein Problem mit meinem Code.

Dateien:
cutoff.jpg  5 kb
 

Wer kann mir helfen?

Kann mir jemand zeigen, wie man einen neuen Indikator erstellt, der auf 3 bekannten Indikatoren basiert? Ich mache eine Strategie, die auf 3 Indikatoren basiert, die sehr starke Kauf/Verkaufssignale zeigen, aber ich möchte 1 Indikator erstellen...

 

ea-Änderung bitte

Bitte helfen Sie mir, die folgenden Änderungen an dieser Ea vorzunehmen

1) Fügen Sie in der Stunde

A) fisher_ 11 Indikator mit den Einstellungen 33,0.5,0.5

B) tcf geglättet Indikator Einstellungen 17, 8, 0.7

c) Außerdem möchte ich, dass der dinap _basic Indikator keine Trades zulässt, wenn er entgegen der Signalrichtung gezogen hat, d.h. wenn er nach oben zieht, sind Kaufsignale NICHT erlaubt, wenn er nach unten zieht, sind Verkaufssignale NICHT erlaubt.

2) Fügen Sie in 15 Minuten hinzu

A) Supertrend-Indikator

B) Trendlord-Indikator

Geldmanagement von

1) Eröffnen Sie 2 Trades mit jeweils 3 % Stop Loss der Kontosumme (1,5%)

2) Eine mit 80 Pips Take Profit oder 2,2 % und die zweite mit 3,8 % Take Profit

3) Verdoppelung der Losgröße für den fünften Handel nach 4 aufeinanderfolgenden Verlusten, dann lineare Erhöhung der Losgröße für die folgenden Handelsgeschäfte bis zu zwei aufeinanderfolgenden Gewinnen und Rückkehr zur Standard-Losgröße.

4) Trailing-Stop von 12pips (oberhalb für Verkauf und unterhalb für Kauf der ehemaligen Kerze atrstops_v1 Indikator für alle Trades.

Das ist alles, bitte helfen Sie mir

 

Sie hätten genau dasselbe mit einer Zeile Code erreichen können.

GlobalVariableSet("TRENDSET_"+Symbol());

Sie könnten auch den Zeitrahmen hinzufügen, um es noch einzigartiger zu machen.

Um ehrlich zu sein, bin ich mir nicht ganz sicher, was der Sinn Ihres Beitrags war.

Mit freundlichen Grüßen

Lux

 

Wie rufe ich einen Wert aus H1 mit iCustom auf?

Hallo,

Ich versuche, einen sehr einfachen Indikator zu programmieren, aber ich bin nicht in der Lage, den Laguerre-Wert von H1 abzurufen.

was ich tun möchte:

Mit 1M TF

Kaufsignal: Laguerre Kreuzung 0,15 Ebene Kopf nach oben und Laguerre H1 > 0,75

Verkaufssignal: Laguerre kreuzt 0.75 Level Kopf unten und Laguerre H1 < 0.15

Ich habe den Indikator für die einfache Kreuzung und es funktioniert, das Problem ist, wenn ich versuche, den Wert von Laguerre H1 zu überprüfen: es ist ein Durcheinander!

Ich habe 2 Möglichkeiten ausprobiert:

Die erste:

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 SeaGreen

#property indicator_color2 Red

#property indicator_width1 3

#property indicator_width2 3

double CrossUp[];

double CrossDown[];

extern bool SoundON=true;

double alertTag;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

SetIndexStyle(0, DRAW_ARROW, EMPTY,3);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY,3);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start() {

int limit, i;

int counted_bars=IndicatorCounted();

//---- check for possible errors

if(counted_bars<0) return(-1);

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(i = 0; i <= limit; i++) {

if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) > 0.15) && (iCustom(NULL,0,"Laguerre",0.66,9500,0,i+1) < 0.15)

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) > 0.75)) //check for buy signal

{

CrossUp = Close;

}

else if ( (iCustom(NULL,0,"Laguerre",0.66,9500,0,i) 0.75)

&& (iCustom(Symbol(),PERIOD_H1,"Laguerre",0.66,9500,0,i) < 0.15)) //check for sell signal

{

CrossDown = Close;

}

if (SoundON==true && i==1 && CrossUp > CrossDown && alertTag!=Time[0]){

Alert("SHORT signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

if (SoundON==true && i==1 && CrossUp < CrossDown && alertTag!=Time[0]){

Alert("Long Signal on ",Symbol()," ",Period());

alertTag = Time[0];

}

}

return(0);

}[/CODE]

second one:

[CODE]//+------------------------------------------------------------------+

//| Shift.mq4 |

//| me |

//|

//+------------------------------------------------------------------+

#property copyright "me"

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

#property indicator_width1 4

#property indicator_width2 4

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

bool Fact_Up = true; // Fact of report that market..

bool Fact_Dn = true; //..is bullish or bearish

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,241);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,242);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexEmptyValue(1,0.0);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

//int limit;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

if(counted_bars<0) return(-1);

//limit=Bars-counted_bars;

//----

double MA; // MA value on 0 bar

double MA2;

double MA3;

double MA4;

//--------------------------------------------------------------------

double value1, value2, value3;

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

//---- main loop

//for(int i=0; i<limit; i++)

{value1=0.0;

value2=0.0;

value3=0.0;

//--------------------------------------------------------------------

// Checking if bullish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) > 0.15) && (iCustom(Symbol(),NULL,"Laguerre",0,i+1) < 0.15) && Fact_Up == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) > 0.75))

{

Fact_Dn = true; // Report about bullish market

Fact_Up = false; // Don't report bullish market

// Alert("BUY SIGNAL.");

value1=Open;

}

//--------------------------------------------------------------------

// Checking if bearish

if( (iCustom(Symbol(),NULL,"Laguerre",0,i) 0.75) && Fact_Dn == true

&&(iCustom(Symbol(),PERIOD_H1,"Laguerre",0,i) < 0.15))

{

Fact_Up = true; // Report about bearish market

Fact_Dn = false; // Don't report bearish market

// Alert("SELL SIGNAL.");

value2=Open;

}

ExtMapBuffer1=value1;

ExtMapBuffer2=value2;

}

//----

return(0);

}

//+------------------------------------------------------------------+

beide funktionieren nicht, die ROTE Linie ist das Problem, ohne die ROTE Linie funktioniert es perfekt.

Ich habe versucht (iCustom(Symbol(),PERIOD_H1, "Laguerre",0,i) < .....)

(iCustom(Symbol(),PERIOD_H1, "Laguerre",0,0) < ....)

(iCustom(Symbol(),60, "Laguerre",0,i) < ....)

(iCustom(Symbol(),60, "Laguerre",0,0) < .....)

Ich habe es auch mit Variablen versucht: (iCustom(Symbol(),PERIOD_H1, "Laguer re",0.66,9500,0,i)

iF i put:

Print(iCustom(Symbol(),60, "Laguerre ",0,i)); vor dem "if" gibt es eine Zufallszahl...

aber mit: Print(iCustom(Symbol(),60, "Laguerre ",0,0)); es gibt den guten Wert von H1 zurück

Jetzt bleibt das Problem dasselbe, wenn ich iCustom(Symbol(),60, "Laguerre",0,0); innerhalb des "if" verwende, funktioniert es nicht...

das Problem ist mit dem "for" und "i" und dem iCustom "shift" Wert, aber ich kann es nicht herausfinden.

Ihre Hilfe wäre sehr willkommen!

Ich habe den Laguerre-Indikator angehängt, den ich verwende, wenn Sie ihn ausprobieren möchten.

Wenn jemand bereit ist, es von Grund auf neu zu programmieren, zögern Sie bitte nicht.

es macht mich wahnsinnig...

Dateien:
laguerre.mq4  3 kb
Grund der Beschwerde: