Wie programmiert man? - Seite 287

 

...

Werfen Sie einen Blick auf diesen Beitrag: https: //www.mql5.com/en/forum/174385/page12

Es ging um ein ähnliches Problem und Sie können die gleiche countOpenedOnACurrentBar

Funktion verwenden, um nur einen Handel pro Crossover zu öffnen

dipu:
Hallo Freunde, ich bin ein Neuling. Ich habe eine einfache Strategie. Ich nur scalping, wenn EMA Crossover. Ich nehme nur einen Handel in jedem Crossover. Ich brauche einen Code, der nur einen Handel bei jedem EMA-Crossover durchführen kann. Bitte......
 

Einfach EMA Crossover Code brauchen........

Vielen Dank, MLADEN...

Ich habe gerade Ihre Funktion überprüft. Es ist gut aussehen. Ich brauche auch etwas Hilfe. Ich habe brauchen, um RSI(50) Wert mit EMA crossover....wie kann ich hinzufügen...?

Paare: GBP/USD & EUR/USD

Zeitrahmen: 15min,1 Stunde und darüber;

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

KAUFEN: EMA 5 Cross EMA 12 nach oben, RSI größer als 50

VERKAUFEN: EMA 5 Cross EMA 12 nach unten, RSI kleiner als 50

(nur ein Handel in jedem EMA Crossover)

Ich warte auf eine Antwort. Bitte.......

 

Dazu gibt es mehrere Möglichkeiten.

Eine Möglichkeit (direkt in EA) könnte so aussehen:

double macdc = iMA(NULL,0,EmaFast,0,MODE_SMA,EmaPrice,0)-iMA(NULL,0,EmaSlow,0,MODE_SMA,EmaPrice,0);

double macdp = iMA(NULL,0,EmaFast,0,MODE_SMA,EmaPrice,1)-iMA(NULL,0,EmaSlow,0,MODE_SMA,EmaPrice,1);

double rsi = iRSI(NULL,0,RsiPeriod,RsiPrice,0);

if (macdc*macdp<0) // change of sign, signal for a new order

{

if (macdc>0 && rsi>50) ... code for buy

if (macdc<0 && rsi<50) ... code for sell

}

[/PHP]

The good thing about it is that it is small (the code) and does not take any significant process time. The bad thing when using conditions like that in an EA is that you have to imagine (and test, test, test ...) what is it going to perform like. I prefer making a "binary" indicator with which the it is very easy to visually inspect if the condition has any logic in it and if it is going to be profitable or not and then call that indicator (using iCustom()) from the EA.

Here is how would the indicator with the above conditions look like in "binary" form :

Sie haben alle benötigten Informationen: Die graue Linie ist der "Trend". Grüne und rote Linien können als Einstiegs- und Wiedereinstiegspunkte verwendet werden. Sie können es visuell im Handumdrehen "optimieren" und diese Parameter dann im EA verwenden (viel schnellere visuelle "Optimierung" als das schmerzhafte "Parameter ändern, ausführen, sehen, was dabei herauskommt, und dann das Gleiche wieder und wieder"). Und es ist ziemlich einfach, es vom EA aus aufzurufen. Es würde wie folgt ablaufen:

[PHP] double trendc = iCustom(NULL,0, "ema + rsi binary",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);

double trendp = iCustom(NULL,0, "ema + rsi binary",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,1);

if (trendc!=trendp)

{

if (trendc== 1) ... Signal für Kauf

wenn (trendc==-1) ... Signal für Verkauf

}

Alles in allem empfehle ich also immer die Verwendung eines Indikators aus einer Ea. Sie können sogar die Logik des EAs ändern, ohne ihn zu berühren, indem Sie den Code Ihres Indikators ändern und verfeinern. In diesem Fall ist der EA "nur" ein Rahmen für Aufträge und Geldmanagement (da die Signale vom Indikator kommen), was meiner Meinung nach die effizienteste Art ist, EAs zu verwenden. Durch das Anhängen des Indikators können Sie entscheiden, welchen Weg (den direkten oder den "Indikator"-Weg) Sie in Ihrem EA verwenden möchten.

PS: In den obigen Beispielen werden die Tests für den aktuellen (noch geöffneten) Balken durchgeführt. Wenn Sie einen geschlossenen Balken testen wollen, ersetzen Sie die 0 und 1 durch 1 und to in den Aufrufen von iCustom(), iMa() und iRSI()

dipu:
Herzlichen Dank, MLADEN...

Ich habe gerade Ihre Funktion geprüft. Es sieht gut aus. Ich brauche auch etwas Hilfe. Ich muss RSI(50) Wert mit EMA Crossover hinzufügen....wie kann ich...?

Paare: GBP/USD & EUR/USD

Zeitrahmen: 15min,1 Stunde und darüber;

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

KAUFEN: EMA 5 Cross EMA 12 nach oben, RSI größer als 50

VERKAUFEN: EMA 5 Cross EMA 12 nach unten, RSI kleiner als 50

(nur ein Handel bei jedem EMA Crossover)

Ich warte auf Antwort. Bitte.......
Dateien:
 

Saldo zum 1. des Monats?

Guten Tag, ich habe hier gesessen und versucht, herauszufinden, ob es eine Möglichkeit gibt, den Anfangssaldo für den 1. des Monats für eine Anzeige auf dem Bildschirm zu extrahieren.

Was ich versuche, ist die prozentuale Differenz zwischen dem Saldo am 1. und dem aktuellen Saldo zu ermitteln.

Ich habe die gesamte prozentuale Differenz.

(Saldo - Einzahlung)/Einzahlung*100

Ich würde gerne eine monatliche Differenz hinzufügen.

(Saldo - 1.)/1.*100

Irgendwelche Hinweise, Tipps oder aktueller Code wären toll.

Vielen Dank

Beno

 

Nochmals vielen Dank, MALADEN...

Vielen Dank für Ihren Hinweis und Rat. Ich versuche gerade, Ihren Anweisungen zu folgen. Aber wie ich bin ungeschickt auf mq4, ich habe es nicht tun................

HIER IST MEIN..............

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

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

#property indicator_separate_window

#Eigenschaft indicator_buffers 3

#property indicator_color1 LimeGreen

#property indicator_color2 BlassViolettRot

#Eigenschaft indicator_color3 DarkGray

#Eigenschaft indicator_width1 2

#property indicator_width2 2

#Eigenschaft indicator_minimum -1.1

#property indicator_maximum +1.1

extern int EmaFast = 5;

extern int EmaSlow = 12;;

extern int EmaPrice = PRICE_CLOSE;

extern int RsiPeriod = 14;

extern int RsiPrice = PRICE_CLOSE;

double signup[];

double signdn[];

double trend[];

extern double TakeProfit=15.0;

extern double Lots=0.1;

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

//

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

int init()

{

return(0);

}

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

//

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

int start()

{

int count,counted_bars=IndicatorCounted();

if(gezählte_Balken < 0) return(-1);

if(gezählte_Balken>0) gezählte_Balken--;

int limit = MathMin(Balken-gezählte_Balken,Balken-1);

int cnt, ticket, total;

double trendc = iCustom(NULL,0, "ema + rsi binär",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);

double trendp = iCustom(NULL,0, "ema + rsi binär",EmaFast,EmaSlow,EmaPreis,RsiPeriode,RsiPreis,2,1);

if (trendc!=trendp)

total = OrdersTotal();

if(total < 1)

{

if (trendc== 1) //... Signal für Kauf

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "Mein EA",12345,0,Green);

if(ticket>0)

{

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

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if (trendc==-1) //... Signal für Verkauf

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "Mein EA",12345,0,Red);

if(ticket>0)

{

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

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

}

return(0);

}

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

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

Ich brauche deine Hilfe....

Ich entschuldigte mich bei Ihnen, wenn ich mehr Aspekt zu Ihnen als Sie fiel stören. Aber ich bin wirklich hilflos...

Ich warte auf Antwort. Bitte.......

 

...

Versuchen Sie es mit etwas wie diesem :

double balanceAtStartOfMonth(int forMonth)

{

double current = AccountBalance();

datetime startTime = iTime(NULL,PERIOD_MN1,forMonth);

//

//

//

//

//

for (int k=OrdersHistoryTotal()-1; k>=0; k--)

{

if (!OrderSelect(k,SELECT_BY_POS,MODE_HISTORY)) break;

if (OrderCloseTime()<startTime) continue;

current -= (OrderProfit()+OrderSwap());

}

return(current);

}

forMonth ist der Monat rückwärts, für den Sie den Saldo sehen möchten. 0 ist der aktuelle Monat. Es wird dann berechnet, wie hoch der Saldo am ersten Tag des gewünschten Monats war. Die Funktion berücksichtigt auch Einzahlungen und Abhebungen (OrderType() == 6), es sollte also gut funktionieren.

Beno:
Guten Tag, ich habe hier gesessen und versucht, herauszufinden, ob es eine Möglichkeit gibt, den Anfangssaldo für den 1. des Monats für eine Bildschirmanzeige zu extrahieren.

Was ich versuche, ist die prozentuale Differenz zwischen dem Saldo am 1. und dem aktuellen Saldo zu ermitteln.

Ich habe die gesamte prozentuale Differenz.

(Saldo - Einzahlung)/Einzahlung*100

Ich würde gerne eine monatliche Differenz hinzufügen.

(Saldo - 1.)/1.*100

Irgendwelche Hinweise, Tipps oder aktueller Code wären toll.

Vielen Dank

Beno
 

...

Sie können nicht verwalten Aufträge von Indikator. Sie können Aufträge nur von Skripten oder EAs verwalten (das ist der Fall, den Sie suchen). Der Code in Ihrem Beitrag ist ein Indikator.

Die Beispiele, die ich gepostet habe, sind von einem EA aus zu verwenden (soweit ich verstanden habe, haben Sie bereits einen EA, in dem Sie die Anzahl der Aufträge begrenzen wollen und die Bedingungen für den Einstieg mit EMA und RSI testen wollen).

dipu:
Nochmals vielen Dank, MALADEN...

Vielen Dank für Ihren Indikator und Ihren Rat. Ich versuche gerade, Ihre Anweisung zu befolgen. Aber wie ich bin ungeschickt auf mq4, ich habe es nicht zu tun................

HIER IST MEIN..............

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

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

#property indicator_separate_window

#Eigenschaft indicator_buffers 3

#property indicator_color1 LimeGreen

#property indicator_color2 BlassViolettRot

#Eigenschaft indicator_color3 DarkGray

#Eigenschaft indicator_width1 2

#property indicator_width2 2

#Eigenschaft indicator_minimum -1.1

#property indicator_maximum +1.1

extern int EmaFast = 5;

extern int EmaSlow = 12;

extern int EmaPrice = PRICE_CLOSE;

extern int RsiPeriod = 14;

extern int RsiPrice = PRICE_CLOSE;

double signup[];

double signdn[];

double trend[];

extern double TakeProfit=15.0;

extern double Lots=0.1;

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

//

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

int init()

{

return(0);

}

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

//

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

int start()

{

int count,counted_bars=IndicatorCounted();

if(gezählte_Balken < 0) return(-1);

if(gezählte_Balken>0) gezählte_Balken--;

int limit = MathMin(Balken-gezählte_Balken,Balken-1);

int cnt, ticket, total;

double trendc = iCustom(NULL,0, "ema + rsi binär",EmaFast,EmaSlow,EmaPrice,RsiPeriod,RsiPrice,2,0);

double trendp = iCustom(NULL,0, "ema + rsi binär",EmaFast,EmaSlow,EmaPreis,RsiPeriode,RsiPreis,2,1);

if (trendc!=trendp)

total = OrdersTotal();

if(total < 1)

{

if (trendc== 1) //... Signal für Kauf

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "Mein EA",12345,0,Green);

if(ticket>0)

{

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

}

else Print("Fehler beim Öffnen der BUY-Order : ",GetLastError());

return(0);

}

if (trendc==-1) //... Signal für Verkauf

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "Mein EA",12345,0,Red);

if(ticket>0)

{

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

}

else Print("Fehler beim Öffnen der SELL-Order : ",GetLastError());

return(0);

}

}

return(0);

}

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

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

Ich brauche deine Hilfe....

Ich entschuldigte mich bei Ihnen, wenn ich mehr Aspekt zu Ihnen als Sie fiel stören. Aber ich bin wirklich hilflos...

Ich warte auf Antwort. Bitte.......
 

Danke für die Antwort, MLADEN,

Sorry, ich glaube, Sie haben mir gesagt, ich solle den Code in einen neuen EA einbauen.

Ich habe einfach nicht verstehen, Ihre Antwort....

YES. Sie haben Recht....

Ich habe EA und wollte ihn ändern. Mit einigen neuen Bedingungen.......

meine Bedingung ist :

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

KAUFEN: EMA 5 Cross EMA 12 nach oben, RSI größer als 50

VERKAUF: EMA 5 Cross EMA 12 nach unten, RSI kleiner als 50

Ausstieg: mit kleinem Take-Profit

(nur ein Trade bei jedem EMA Crossover)

hier mein EA.....

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

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

extern double Lots=0.1;

extern int TakeProfit=5;

extern int StopLoss=5;

extern int RSIPos=50;

extern int RSINeg=50;

extern int Slippage=2;

extern int abandon=101;

datetime bartime=0;

int bartick=0;

double p;

int cnt=0;

int OrdersPerSymbol=0;

double bullMA3=0;

double bearMA7=0;

double RSI=0;

bool RSIPOS=0;

bool RSINEG=0;

double TP;

double SL;

int init()

{

if (Symbol()=="AUDUSD") {TakeProfit= 60; StopLoss= 23; abandon=103;}

if (Symbol()=="EURAUD") {TakeProfit= 95; StopLoss=141; abandon=33;}

if (Symbol()=="EURCHF") {TakeProfit= 81; StopLoss= 77; abandon=97;}

if (Symbol()=="EURGBP") {TakeProfit= 11; StopLoss= 77; abandon=108;}

if (Symbol()=="EURJPY") {TakeProfit= 38; StopLoss= 75; abandon=183;}

if (Symbol()=="EURUSD") {TakeProfit=35; StopLoss= 35; abandon=5;}

if (Symbol()=="GBPCHF") {TakeProfit= 79; StopLoss= 98; abandon=113;}

if (Symbol()=="GBPJPY") {TakeProfit= 13; StopLoss= 98; abandon=117;}

if (Symbol()=="GBPUSD") {TakeProfit= 55; StopLoss=100; abandon=69;}

if (Symbol()=="USDCAD") {TakeProfit= 66; StopLoss= 76; abandon=106;}

if (Symbol()=="USDCHF") {TakeProfit=117; StopLoss= 78; abandon=111;}

if (Symbol()=="USDJPY") {TakeProfit= 53; StopLoss= 74; abandon=110;}

}

int deinit()

{

}

int start()

{

p=Punkt;

// Fehlerprüfung & Balkenzählung

if(AccountFreeMargin()<(200*Lots)) {Print("-----NO MONEY"); return(0);}

if(Bars<100) {Drucken("-----NO BARS "); return(0);}

if(bartime!=Zeit[0]) {bartime=Zeit[0]; bartick++;}

bullMA3=iMA(Symbol(),0,3,0,MODE_EMA,PRICE_CLOSE,1);

bearMA7=iMA(Symbol(),0,7,0,MODE_EMA,PRICE_CLOSE,1);

RSI=iRSI(Symbol(),0,2,PRICE_CLOSE,2);

if(RSI>RSIPos) {RSIPOS=true; RSINEG=false;}

if(RSI<RSINeg) {RSIPOS=false; RSINEG=true;}

OrdersPerSymbol=0;

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if( BestellSymbol()==Symbol() )

{

OrdersPerSymbol++;

}

}

if(OrdersPerSymbol==0)

{

if(bullMA3>(bearMA7+p) && RSINEG)

{

SL=Ask-(StopLoss*p);

TP=Ask+(TakeProfit*p);

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP, "BUY "+CurTime(),0,0,White);

bartick=0;

}

if(bullMA3<(bearMA7-p) && RSIPOS)

{

SL=Bid+(StopLoss*p);

TP=Bid-(TakeProfit*p);

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP, "SELL "+CurTime(),0,0,Red);

bartick=0;

}

}

if(OrdersPerSymbol==1 && bartick==abandon)

{

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),Lots,Bid,Slippage,White);

SL=Bid+(StopLoss*p);

TP=Bid-(TakeProfit*p);

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP, "SELL "+CurTime(),0,0,Red);

bartick++;

}

if(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(),Lots,Ask,Slippage,Red);

SL=Ask-(StopLoss*p);

TP=Ask+(TakeProfit*p);

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP, "BUY "+CurTime(),0,0,White);

bartick++;

}

}

for(cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if( BestellSymbol()==Symbol() )

{

if(OrderType()==OP_BUY)

{

wenn (OrderMagicNumber()==0)

{

if( Bid-OrderOpenPrice() > 3*Point )

{

OrderClose(OrderTicket(),Lots,Bid,0,White);

return(0);

}

}

}

if(OrderType()==OP_SELL)

{

wenn (OrderMagicNumber()==0)

{

if( OrderOpenPrice()-Ask > (3*Point) )

{

OrderClose(OrderTicket(),Lots,Ask,0,Red);

return(0);

}

}

}

}

}

return(0);

}

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

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

Wie kann ich es ändern....? Ich warte auf Antwort. Bitte.......

 

dipu

Was die Eingaben betrifft, so funktioniert diese hier gut.

Kümmern Sie sich jetzt um die Exits, denn so wie Sie es geschrieben haben, schließen Sie die Orders zu früh. Auch der 5-stellige Broker ist jetzt erledigt, und die Entrys funktionieren, wie sie sollten. Standard-Periode für rsi ist auf 14 (ich wusste nicht, welche Sie verwenden möchten, im Code verwenden Sie Periode 2, aber das ist wahrscheinlich zu kurz). Ema Perioden sind standardmäßig 5 und 12. Außerdem wird jetzt ein geschlossener Balken getestet (es wird gewartet, bis der Balken geschlossen ist, und wenn dann ein Kauf- oder Verkaufssignal vorliegt, wird der Auftrag eingegeben).

Dateien:
dipu.mq4  5 kb
 

Danke für die Antwort, MLADEN,

sorry nicht für klare Informationen.......

KAUFEN: EMA 5 Cross EMA 12 nach oben, RSI[14] größer als 50

VERKAUFEN: EMA 5 Cross EMA 12 nach unten, RSI[14] kleiner als 50

Ausstieg: mit kleinem TP/Sl....(5pip)

(nur ein Handel in jedem EMA Crossover)

Ich probiere es gerade aus & werde Sie über das Ergebnis informieren....

Kann es auch ändern.. oder nicht..

Nochmals vielen Dank für Ihre Hilfe.....