Wie programmiert man? - Seite 206

 

Externe *.set-Dateien verwenden

Ich habe versucht und versucht, aber kann nicht herausfinden, so hoffentlich jemand kann den Baum durch den Wald hier zu sehen.

Ich möchte einen EA so programmieren, dass er entweder seine programmierten Einstellungen verwendet oder aber eine externe *.set-Datei verwendet.

Also wenn:

extern bool UseExternSet = true;

werden die Einstellungen in der externen Set-Datei und nicht die programmierten Einstellungen verwendet.

Ich weiß, dass es möglich ist, aber ich weiß nicht mehr weiter.

Jedes ea-Beispiel genügt

Bernhard

 

Compiler-Problem oder Code-Problem?

extern int ma1period=5;

extern int ma1method=1;

extern int ma1tf=0;

extern int ma2period=5;

extern int ma2method=1;

extern int ma2tf=10080;

extern double lots=1;

int init(){}

int deinit(){}

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA)

}

int start()

{

int BarsCount=0;

if (Bars> BarsCount)

{

BarsCount=Bars;

double ma1.1=CMA(ma1tf,ma1period,1,ma1method);

double ma1.2=CMA(ma1tf,ma1period,2,ma1method);

double ma2.1=CMA(ma2tf,ma2period,1,ma2method);

double ma2.2=CMA(ma2tf,ma2period,2,ma2method);

bool ma1upsignal =ma1.2<ma1.1;

bool ma1downsignal =ma1.2>ma1.1;

bool ma2upsignal =ma2.2<ma2.1;

bool ma2downsignal =ma2.2>ma2.1;

if (ma1upsignal&&ma2upsignal)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);

}

if (ma1downsignal&&ma2downsignal)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);

}

if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))

{

int total=OrdersTotal(); //Script to close all open orders.

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

{

OrderSelect(i, SELECT_BY_POS);

int type = OrderType();

switch(type)

{

//Close opened long positions

case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

break;

//Close opened short positions

case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

}

}

}

}

Dies ist das Stück Code, an dem ich arbeite. Der Compiler sagt "die Variable BarsCount ist nicht definiert". Was soll ich tun? Soweit ich sehen kann, wurde die Variable initialisiert und mit einem Wert versehen.

Ist das ein Problem mit dem Compiler oder mit dem Code?

Dateien:
capture2_1.png  12 kb
 

[CODE]

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,Periode,0,Methode,0,Verschiebung);

return(MA);

}

 
username1:
[CODE]

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,Periode,0,Methode,0,Verschiebung);

return(MA);

}

Michel,

danke. Das hat das Problem gelöst. :-)

 

Aufeinanderfolgende Balken zählen

Hat jemand einen Code, mit dem man aufeinanderfolgende Kauf-/Verkaufsbalken in einer Reihe zählen kann? Ich möchte zählen, wie oft auf einem Diagramm (geben Sie die Anzahl der Bars zu überprüfen) gibt es 1 Verkauf Bars in einer Reihe, 32Verkauf Bars in einer Reihe, 3 Verkauf Bars in einer Reihe, 4 Verkauf Bars in einer Reihe (gleiche w / kaufen) usw.

Ich weiß, dass ich eine Schleife bilden muss, aber ich weiß nicht genau, wie.

Die Ergebnisse können in einem Comment() ausgegeben werden.

danke.

 

Warum funktioniert mein Prog nicht?

Ich habe ein einfaches Programm geschrieben.

Es soll jeweils nur einen Auftrag eingeben und mit einem Take-Profit oder Stop-Loss beenden.

Es ist für M30 auf GBPUSD eingerichtet.

D.h.: einige der Konstanten, die in dem Programm verwendet werden, wurden durch Schätzungen ermittelt. Dies sollte nicht viel Einfluss auf die prog... es funktioniert auch nicht w / andere Konstanten. (Zumindest, wenn es mit dem Strategy Tester getestet wird, der auf schnell oder mittel eingestellt ist: nicht "tick by tick". (zu langsam...)

Jedenfalls gibt das Programm, wenn es getestet wird, keine Order ein UND prüft nie! in die Richtung "aufwärts". (Dies, über den "print"/trace)

(es soll prüfen: eingeben mit Kauf oder eingeben mit Verkauf)

Zufällige Logik: 2 aufeinanderfolgende Balken prüfen. Wenn Balken 1 sowohl ein höheres Hoch als auch ein höheres Tief aufweist, geht das Programm davon aus, dass der nächste Balken nach oben gehen wird.

(Symetrisch für abwärts.)

Take Profit und Stop Loss werden entsprechend gesetzt.

Das Programm funktionierte auch nicht, wenn die "if"-Anweisungen verschachtelt waren....

Danke, dass Sie sich das angesehen haben.

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

//| Experten-Initialisierungsfunktion

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

int init()

{

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

//----

bool TrendUp1; double TakeProfitUp; double EE = .00500;

bool OrdTot_OK;double lot;double slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;

bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;

bool High2down; bool Low2down;

int ABC = OrdersTotal();

double Size1 = .00630;bool BigUp; double A = High[1];double B= Low[2];//41

double C= Hoch[2]; double D= Tief[1];bool BigDown;

//------------------------------------Auftragsstart abwärts

if (ABC == 0)// keine Aufträge aus ist wahr

OrdTot_OK = true;

if (ABC == 0)// keine Orders vorhanden ist true

Print ("on down order sequence, no orders were out");

if ((C-D) > Size1)//high von 2 minus low von 1 > .0063

BigDown = wahr;

if ((C-D) > Size1)//Hoch von 2 minus Tief von 1 > .0063

Print ("on down order sequence, found a big breakout down");

wenn (Hoch[1]< Hoch[2])

High2down=true;

wenn (Hoch[1]< Hoch[2])

Print ("on down order sequence, the consecutive bars have decreasing highs");

if(Tief[1]< Tief[2])

Low2down=true;

if(Tief[1]< Tief[2])

Print ("bei absteigender Reihenfolge haben die aufeinanderfolgenden Balken abnehmende Tiefststände");

if (High2down && Low2down)

TrendDown=true;

if (Hoch2abwärts && Tief2abwärts)

Print ("bei abwärts gerichteter Ordersequenz ist das TrendDown-Flag gesetzt");

wenn (TrendDown)

SL_Trailing_Down = Hoch[1];

if (TrendAbwärts)

Print ("bei abwärts gerichteter Ordersequenz wurde der Stop_Loss gesetzt");

wenn (TrendAbwärts)

TakeProfitDown = Bid - (.005);

wenn (TrendAbwärts)

Print ("on down order sequence, got a takeprofit", TakeProfitDown);

wenn (TrendDown && BigDown)

DownAndBig = wahr;

if (DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);

if (DownAndBig && OrdTot_OK)

Print ("on down order sequence, tried to enter a ticket", ticketdown);

if (ticketdown < 0)

Print("OrderSend_Down fehlgeschlagen mit Fehler #",GetLastError());

return(0);

//----------------------------------------------down order done

//---------------------------------------------------up order start

wenn (ABC == 0)

OrdTot_OK = true;

wenn (ABC == 0)

Print ("bei der Aufwärtssequenz wurden keine Aufträge erteilt");

wenn ((A - B) > Größe1)

BigUp = true;

wenn ((A - B) > Größe1)

Print ("in der Aufwärtssequenz war der Größentest für die beiden Bars in Ordnung");

wenn (Hoch[1] > Hoch[2])

High2Up = true;//44

wenn (Hoch[1] > Hoch[2])

Print ("bei der Aufwärtssequenz war der Test auf steigende Hochs in Ordnung");

if(Tief[1] > Tief[2])

Low2Up=true;

if(Tief[1] > Tief[2])

Print ("bei der Aufwärtssequenz war der Test auf steigende Tiefststände in Ordnung");

if (High2Up && Low2Up)

TrendUp1=true;

if (High2Up && Low2Up)

Print ("bei der Aufwärtssequenz wurde das Flag für die Aufwärtsbewegung gesetzt");

if (TrendUp1)

SL_Trailing_Up = Low[1] ;

if (TrendUp1)

Print ("in der Aufwärtssequenz wurde der Stoploss gesetzt");

if (TrendUp1)

TakeProfitUp = Ask + (.005);

wenn (TrendUp1)

Print ("in der Aufwärtssequenz wurde der TakeProfit festgelegt", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = wahr;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Print ("in der Aufwärtssequenz, versuchte eine Order zu senden", ticketup);

if (ticketup < 0)

Print("OrderSend_Up fehlgeschlagen mit Fehler #",GetLastError());

return(0);

//-------------------------------------------------up order done

//----

return(0);// nicht sicher über diese Zeile

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

//----

return(0);

}

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

 

Mindestanzahl von Balken vor/nach dem Handel

Hallo!

Hallo, ich bin neu bei MT4.. Könnte mir bitte jemand sagen, wie ich eine Beschränkung in einen EA einfügen kann, die ein Minimum von "x" Bars erfordert, um entweder eine neue Position zu eröffnen oder eine vorherige zu schließen?

(ohne den sleep-Befehl zu verwenden)

Mit freundlichen Grüßen.

 

mql-Codierungshilfe

if (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;

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

Was bedeutet das?

2 LWMA verwendet ?

LWMA-Periode =24 Shift =0 bei preisgewichtetem (hcll4) Cross over LWMA-Periode 120 Shift =1 bei preisgewichtetem (hcll4) dann kaufen oder verkaufen ??

 

Problem mit Schließposition

Hallo,

Ich habe gerade mit meinem neuen EA angefangen und das Öffnen von Positionen ist OK, ich habe tp und sl eingerichtet. EA öffnen und schließen 1 von 1 Position und nie gibt es mehr als 1 Ordnung. Aber ich möchte Position zu schließen, wenn einige der Indikatoren alarmieren mich vor sl oder tp Grenze.

Wenn ich etwas wie dieses versuche:

for (int i=1; i<=OrdersTotal(); i++) {

if (OrderSelect(i, SELECT_BY_POS, 2)) {

if (OrderSymbol()==Symbol()) {

Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing

}

}

}[/CODE]

Nothing happened. Doesn't find any opened positions and I know there is 1.

If I try something like this:

for (int i=1; i<=OrdersTotal(); i++) {

CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);

}

Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.

If I try direcly by number to close:

[CODE]

Ans=OrderClose(0,alLots,Bid,2);// Order closing

Ich bekomme die Fehlermeldung 4107 oder 4105, dass der Ticker ungültig ist.

Kann jemand dies und mein ea im Anhang überprüfen und bitte helfen?

Vielen Dank!

Dateien:
rsiproba.mq4  6 kb
 

iHöchste iNiedrigste Klärung

Gehen Sie von 3 Balken aus: Bar [2], Bar [1] und Bar [0] (Aktuell).

Ist die folgende Funktion "stop_low()" korrekt, um das niedrigste Tief von Takt [2] und [3] zu finden?

double stop_low = iLowest(Symbol(),0,1,2,1);

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

Referenz:

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

Gibt die Verschiebung des kleinsten Wertes über eine bestimmte Anzahl von Perioden zurück, je nach Typ.

Parameter:

symbol - Symbol, dessen Daten zur Berechnung des Indikators verwendet werden sollen. NULL bedeutet das aktuelle Symbol.

Zeitrahmen - Zeitrahmen. Es kann ein beliebiger Wert aus der Timeframe Aufzählung sein. 0 bedeutet den aktuellen Chart-Zeitrahmen.

type - Serien-Array-Bezeichner. Kann ein beliebiger Wert aus der Aufzählung Series array identifier sein.

count - Anzahl der Perioden (in Richtung vom Startbalken zum letzten), für die die Berechnung durchgeführt wird.

start - Verschiebung, die den Balken relativ zum aktuellen Balken anzeigt, von dem die Daten genommen werden sollen.

Beispiel:

// Berechnung des niedrigsten Wertes der 10 aufeinanderfolgenden Balken im Bereich

// vom 10. bis einschließlich 19. Index im aktuellen Chart

double val=Low;

Grund der Beschwerde: