Wie programmiert man? - Seite 106

 

Das funktioniert beim Preis. Er will den höchsten und den niedrigsten Wert eines Indikators finden.

Lux

 

Hallo,

Sie können dies versuchen:

....

int highest=0, lowest=0, bar=WindowBarsPerChart();

for(int shift=0;shift<bar;shift++)

{

double indie=iCustom(.........,shift);

if(highest<indie) highest=indie;

if(lowest==0) lowest=indie;

if(lowest>indie) lowest=indie;

}

.....

Hinweis: dieser Code berechnet auch die aktuelle offene Kerze, wenn Sie nur die geschlossene Kerze berechnen wollen, verwenden Sie shift=1.

Hoffentlich hilft das,

Ardie

 
:: iBarShift findet für Sie den Bar, der an diesem Tag/Stunde beginnt... oder auch den Endbar für diesen Tag/Stunde... (je nachdem, mit welchem Zeitrahmen oder Chart Sie beginnen möchten, um Ihr Hoch/Tief zu finden).

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)

weiter...

iHighest und iLowest:: verwendet diese Barpositionen, um die Ergebnisse von iHighest und iLowest zu ermitteln

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

:: Ergebnisse & fertig , verwenden Sie keine Schleifen hier!

 

Programmatisch den Repaint-Indikator aktualisieren

Hallo,

Ich suche nach einer Möglichkeit, einen Repaint-Indikator alle x Minuten zu aktualisieren.

Der einzige Weg, um es derzeit zu aktualisieren, ist in den Indikator auf dem Chart klicken und dann auf "ok". Können wir es mit MQL4-Code automatisieren?

Ich habe etwas auf der Website von Codersguru gefunden, Programmatically Refresh your charts | www.metatrader.info, aber es scheint bei mir nicht zu funktionieren. Oder gibt es jemanden, der es ausprobiert hat und ein anderes Ergebnis (funktionierend) erhalten hat?

Ich danke Ihnen

 

Entschuldigung für meine Englischkenntnisse.

Ich möchte die Anzahl der Male zählen, die die Bedingung nur einmal pro Balken wahr ist. Computer summiert viele Male pro Balken. Was mache ich falsch?

 
IngvarDagmar:
Ich möchte die Anzahl der Male zählen, die die Bedingung wahr ist, nur einmal pro Balken. Computer addiert viele Male pro Balken. Was kann ich falsch machen?

Verwenden Sie eine Funktion wie diese...

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

[/php]

Then put an if statement round your main code, like...

[php]

if(NewBar() == true){

// do the main processing here

}

Ich hoffe, das hilft.

Lux

 

Das war sehr nett von dir, Lux.

Ich habe das hier gefunden:

Jeden Balken nur einmal verarbeiten - MQL4 forum

Automated 2008.01.15 18:54 Sie könnten Ihren Code beim allerersten Tick eines neuen Balkens ausführen ( d.h. gleich nachdem der vorherige Balken geschlossen wurde ).

Hier ist eine Funktion, die TRUE zurückgibt, wenn sich gerade ein neuer Balken gebildet hat:

// Diese Funktion liefert TRUE beim allerersten Tick eines Balkens, d.h. nachdem der vorherige Balken gerade geschlossen wurde

bool NewBar()

{

if(VorherigerBalkenZeit<Zeit[0])

{

VorherigeBarZeit = Zeit[0];

return(true);

}

return(false); // für den Fall, dass die if - else Anweisung nicht ausgeführt wird

} Sie müssen den Zeitpunkt PreviousBarTime am Anfang Ihres EAs deklarieren...

dann könnten Sie in Ihrem Code einfach verwenden

if ( NewBar() )

{

...... Code, der ausgeführt werden muss, nachdem ein Bar hier geschlossen wurde ....

} Danke

automatedfx@gmail.com

---------------------------------------------------

Mir ist aufgefallen, dass Sie STATIC verwendet haben... Ich habe es nachgeschlagen... was ist der Vorteil von STATIC gegenüber einer globalen Variable?

 

ea mit mehreren eingängen

Bitte helfen Sie. Ich möchte finden oder brauchen Hilfe bei der Erstellung eines ea mit den folgenden Eingabeparametern. vier separate Handelseinträge jeweils mit Anzahl der Lose, Stop-Loss, Trailing-Stop, Break-Even und Gewinnziel. Trades werden beim Klicken auf Expert Advisor-Taste zu öffnen.

Vielen Dank!

 

Brauche Hilfe bei Trailing Stop Option

Ich habe diesen EA im MQL4-Forum gefunden, ein ziemlich interessanter EA.

könnte jemand helfen, eine Trailing-Stop-Option hinzuzufügen, die Trailing-Stop nur aktivieren kann, nachdem der Gewinnwert, den ich eingestellt habe, erreicht wurde?

themastermind2.mq4

Dateien:
 

Hallo zusammen...

Ich habe ein Problem mit der EA, die ich schrieb... eigentlich, die EA basiert auf MACD-Indikator... wenn der MACD werden wie "n"-Form, offene Post verkaufen, und wenn MACD werden wie "u"-Form, die EA wird Buy öffnen.

das Problem ist, die EA nicht öffnen keine Post.. nachdem ich tun einige Backtest auch, es keine offenen Post von diesem EA.. kann jemand bitte helfen Sie mir finden, was falsch ist mit dem Code?

Hier ist der Code...

extern double TakeProfit = 20;

extern double Lots = 0.1;

extern double StopLoss = 20;

extern double MagicNumber = 17384;

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

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

//| expert initialization function |

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

double MacdBuffer1[];

double MacdBuffer2[];

double MacdBuffer3[];

double MacdBuffer4[];

double MacdBuffer5[];

double MacdBuffer6[];

double MacdBuffer7[];

double MacdBuffer8[];

int init()

{

//----

//SetIndexBuffer(0, lag1_buffer);

//SetIndexBuffer(1, lag2_buffer);

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

int limit;

int counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd counted in the 1-st buffer

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

MacdBuffer1=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

MacdBuffer2=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-1);

MacdBuffer3=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+1);

MacdBuffer4=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-2);

MacdBuffer5=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+2);

MacdBuffer6=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-3);

MacdBuffer7=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+3);

/*Alert( "MacdBuffer7 =",MacdBuffer7);

Alert( "MacdBuffer5 =",MacdBuffer5);

Alert( "MacdBuffer3 =",MacdBuffer3);

Alert( "MacdBuffer1 =",MacdBuffer1);

Alert( "MacdBuffer2 =",MacdBuffer2);

Alert( "MacdBuffer4 =",MacdBuffer4);

Alert( "MacdBuffer6 =",MacdBuffer6);*/

//----

int ticket_buy, ticket_sell, total;

total=OrdersTotal();

//MACD become 'u' shape

if (MacdBuffer7>MacdBuffer5&&MacdBuffer5>MacdBuffer3&&MacdBuffer3>MacdBuffer1

&&MacdBuffer1<MacdBuffer2&&MacdBuffer2<MacdBuffer4&&MacdBuffer4<MacdBuffer6)

{

if (total < 1) {

ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"scalp 1 min - buy",MagicNumber,0,Green);

if(ticket_buy>0)

{

if(OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

} else {

}

}

//MACD become 'n' shape

if(MacdBuffer7<MacdBuffer5&&MacdBuffer5<MacdBuffer3&&MacdBuffer3<MacdBuffer1

&&MacdBuffer1>MacdBuffer2&&MacdBuffer2>MacdBuffer4&&MacdBuffer4>MacdBuffer6)

{

if (total < 1) {

ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"scalp 1 min - sell",MagicNumber,0,Red);

if(ticket_sell>0)

{

if(OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

} else {

}

}

//----

return(0);

}

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

hoffe, jemand kann mir helfen, das Problem zu lösen... ich bin nicht gut in der Programmierung von Codes... danke...