Wie programmiert man? - Seite 232

 

Idee

OK Jungs und Mädels

Ich habe mit dem Gedanken gespielt, einfach eine CUF (Commonly used functions) zu erstellen - nach allem, was ich gelesen habe, kann man Skripte nicht aus einem EA heraus aufrufen.

Nichtsdestotrotz - ich denke über einen Workaround nach, weil ich es nicht mag, jedes Mal das Rad neu zu gestalten, und ich bin mir sicher, dass die Dinge auf diese Weise besser funktionieren würden.

Wie jeder weiß, werden Skripte geladen, machen ihr Ding und werden dann nie wieder geladen, außer man drückt seine Tastenkombinationen.

Das ist ein großes Problem, das ich bei allen EAs sehe: Sie scheinen festzustecken, während sie darauf warten, dass irgendeine Zeitbedingung oder eine krude "Schlaf"-Bedingung vorübergeht, bevor sie fortfahren. Das macht ein Abbrechen und Verkaufen im Bruchteil einer Sekunde unwahrscheinlich, was bei extrem volatilen Bedingungen, mit denen man in ein paar Sekunden ein Vermögen machen könnte, ein großer Fehler ist.

Die Lösung? Einen CUFF-Indikator erstellen, der mit globalen Variablen arbeitet? Hat jemand dies versucht. Der Indikator Zyklen jeden Tick so seine perfekt.

 

Wie kodiere ich einen Alarm, der Ton- oder E-Mail-Warnungen sendet, wenn mehrere Indikatoren und Balkenbedingungen erfüllt sind?

 

Hallo,

als Neuling möchte ich fragen, ob die eingebauten Metastock-Funktionen: ref() und stochmomentum() von einigen Funktionen in Metatrader implementiert werden

thnx

 

Darian siehe mein obiges Beispiel von globals. finden Sie ein Skript, das emails / pfeift / tut, was Sie wollen, und Code es in sie. Geist Sie müssen berücksichtigen, dass sie alle nicht genau zur gleichen Zeit gehen, so dass Sie ein paar Sekunden / Minute Verzögerung in sie setzen müssen, bevor Sie die Variablen zurück auf 0.

 

mit Global

Kann ich eine GlobalVarible zu einem Indikator wie diesem hinzufügen?

if ( trend[2]0 && Volume[0]>1 && !UpTrendAlert)

{

GlobalVariableSet("trend "+Symbol(),1);

// Print("UP" + GlobalVariableGet("trend "+Symbol()));

Message = " Buy "+Symbol()+" M "+Period()+": Signal für BUY";

if ( AlertMode>0 ) Alert (Message);

UpTrendAlert=true; DownTrendAlert=false;

dann rufen Sie diese GlobalVariable in einem EA mit

int init() {

GlobalVariableDel("Trend "+Symbol());

Trend = GlobalVariableGet("Trend "+Symbol());

Kaufen = (Trend == 1);

Verkaufen = (Trend == 2);

Jede Hilfe ist willkommen

 

Sie könnten jedoch, wenn Sie mehr als 1 Währung handeln, die nicht funktionieren.

 

Probleme mit Arrays, brauche Hilfe!

Hallo,

Ich versuche, eine Funktion zu erstellen, die feststellt, ob ein offener Auftrag mehr Geld verliert als ein Grenzwert (sagen wir $-1000).

Die Funktion soll dann das OrderTicket() und den OrderProfit() in zwei separaten Arrays speichern und mit return (1) beenden, um zu signalisieren, dass der Cutoff-Punkt erreicht wurde.

Bevor die Werte in diesen Arrays gespeichert werden, sollte das Array OrderTicket() überprüft werden, um festzustellen, ob diese Bestellung bereits eingereicht wurde.

Wenn die OrderTicket-Nummer bereits in dem Array gespeichert ist, soll es feststellen, ob die Order ZUSÄTZLICHE $1000 verloren hat, und wenn ja: den Wert im OrderProfit()-Array durch einen neuen Wert ersetzen und mit return(1) beenden, um zu signalisieren, dass ein NEUER Schwellenwert erreicht wurde. Wenn die Order keine zusätzlichen $1000 verloren hat (Cutoff genannt), dann sollte return(0) zurückgegeben werden, um zu signalisieren, dass keine Order zusätzliche $1000 verloren hat.

Ich glaube, ich habe es ziemlich gut hinbekommen (nicht sicher??), aber aus irgendeinem Grund wird das Array mit einer Menge von '0'-Werten zusammen mit den legitimen Werten gefüllt. Die Ausgabe des Arrays ist wie folgt:

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 431 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 425 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 386 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 371 ResumeArrayPrices[k] = -12933

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 320 ResumeArrayPrices[k] = -6057

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 249 ResumeArrayPrices[k] = -5076

ResumeArrayTickets[k] = 241 ResumeArrayPrices[k] = -1017

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 230 ResumeArrayPrices[k] = -13122

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 186 ResumeArrayPrices[k] = -4068

ResumeArrayTickets[k] = 128 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

[/code]

The following is my actual code:

[code]

int CheckForResume()

{

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

}

int arraycount1 =1;

int arraycount2 =1;

bool found = false;

int k;

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

if (OrderProfit()< Cutoff)

{

for (k=0; k<ArraySize(ResumeArrayTickets); k++)

{

if ((ResumeArrayTickets[k] == OrderTicket()) && ResumeArrayTickets[k] !=0)

{

found = true;

if (ResumeArrayPrices[k] + Cutoff < OrderProfit())

{

return (0);

}

else

{

Print ("ELSE");

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1);

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

if (found == false)

{

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1)'

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

return (0);

}

}

 

Einen EA einmal pro Takt aktualisieren

Hallo, gibt es eine Möglichkeit, einen EA zu aktualisieren, so dass er wie beim ersten Mal reagiert, wenn er initialisiert wird? (Wie ein Neustart) Es muss einmal pro Bar gemacht werden. Z.B. einmal alle 30 Minuten.

RefreshRates() und WindowRedraw() machen das nicht richtig.

Ich möchte auch ein paar Variablen beibehalten und die Daten nicht verlieren.

Gibt es eine Möglichkeit, dies zu bewerkstelligen?

Ich würde dies auch gerne für einen Indikator tun können.

Vielen Dank!

 

Hilfe bei der Programmierung

Hallo an alle,

Ich arbeite an der Modifizierung einer Währung Stärke Meter, um die Stärke der Währung auf der Grundlage der Zeit aus dem Diagramm anzuzeigen. Zur Zeit 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);

Ich verstehe, dass MODE_HIGH und MODE_LOW die Höchst- und Tiefstwerte des aktuellen Tages abrufen. 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 benutzen Sie bitte kleine Worte:)

 

Schauen Sie im Hilfehandbuch nach den Funktionen iHigh und iLow.

Viel Glück!

Lux