Wie programmiert man? - Seite 267

 
christinaLi:
Ich würde Ihnen gerne bei dieser Funktion, von der Sie sprechen, helfen, aber es scheint, dass ich Ihre Logik nicht einfach nachvollziehen kann. Das hat wirklich nichts mit der anderen Logik der Strategie zu tun.

Das möchte ich einfach wissen.

Wenn Sie 1 Lot kaufen bei 1,4110 und 2 Lot verkaufen bei 1,4200. Zu welchem Preis denken Sie, dass Sie 6 Pips Gewinn haben?

Hallo Christina,

in meinem Positionsmanagement wird nie 1 Kauf-Lot mit Gewinn geschlossen, bevor 2 Verkaufs-Lots eröffnet werden.(Verkauft wird nie, weil 1 Kauf-Lot mit Gewinn geschlossen wurde, warten auf das nächste Signal)

zurück zu deinem Beispiel:

aber es gibt eine Linie bei ca. 1,4175, wo 2 Verkaufslose (Gewinn nach oben, Markt nach unten) und 1 Kauflos (Gewinn nach unten, Markt nach unten) preisgleich sind (Breakeven 0), also bei 1,4169 sind 6 Pips Gewinn bereit - dann würde ich alle Orders schließen

IX

 
ixbone:
Hallo Christina,

In meinem Positionsmanagement wird nie 1 Kauf-Lot mit Gewinn geschlossen, bevor 2 Verkaufs-Lots eröffnet werden. (Verkauft wird nie, weil das 1. Kauf-Lot mit Gewinn geschlossen wurde, man wartet auf das nächste Signal)

Zurück zu Ihrem Beispiel:

aber es gibt eine Linie bei ca. 1,4175, wo 2 Verkaufslose (Gewinn nach oben, Markt nach unten) und 1 Kauflos (Gewinn nach unten, Markt nach unten) preisgleich sind (Breakeven 0), also bei 1,4169 sind 6 Pips Gewinn bereit - dann würde ich alle Aufträge schließen

IX

Denn mein Beispiel ist 1,4110 und 1,4200. Hier ist meine Berechnung:

Erstens, bei 1,4170 (ohne Berücksichtigung der Spreads) sind wir Break Even. Jetzt haben wir 2 Verkaufspartien mit einem Gewinn von je 30 Pips und 1 Kaufpartie mit einem Verlust von 60 Pips, also Break-Even in Dollar ausgedrückt.

Wenn Sie sich genau an mein Beispiel halten, sollten Sie bei 1,4164 insgesamt 6 Pips Gewinn haben.

Bei 1,4164 (ohne Berücksichtigung der Spreads) haben wir 2 Verkaufspartien mit einem Gewinn von je 36 Pips und 1 Kaufpartie mit einem Verlust von 54 Pips, also einen Gewinn von 72 Pips durch Verkäufe und einen Verlust von 54 Pips durch Käufe. Insgesamt haben Sie für die Gruppe von Geschäften 3 Lose mit einem Gewinn von 18 Pips. Es ist also vernünftiger, wenn Sie jetzt einen Gewinn von 6 Pips erzielen.

Allerdings werden die Dinge wieder wegen der Spreads kompliziert. Denn wenn der Geldkurs bei 1,4164 liegt und der Briefkurs vielleicht bei 1,4166, dann haben Ihre Verkäufe jeweils nur einen Gewinn von 34 Pips. Insgesamt für die Gruppe von Trades, haben Sie 3 Lose mit einem Gewinn von 14 Pips. Sie haben also tatsächlich 4,7 Pips Gewinn gemacht.

Wenn ich dieses Beispiel einen Schritt weiter führe, wenn wir 2 Käufe und 3 Verkäufe haben. Dann erreichen Sie bei 1,4164 die Gewinnschwelle.

Wenn wir die Spreads nicht berücksichtigen, dann brauchen wir 30 Pips Gesamtgewinn, um 5 Pips Gewinn pro Lot zu haben. Die 6 Pips Gewinn wären also bei einem Preis von 1,4134, ist das korrekt?

Ihr System wird wahrscheinlich nicht diese Art von Situation haben, es ist das Prinzip, das ich erhalten möchte. Sind Sie mit der obigen Berechnung einverstanden?

 
christinaLi:
Denn mein Beispiel ist 1,4110 und 1,4200. Hier ist meine Berechnung:

Zunächst einmal, bei 1,4170 (ohne Berücksichtigung der Spreads) sind wir Break-Even. Jetzt haben wir 2 Lose zu verkaufen, mit einem Gewinn von 30 Pips pro Stück und 1 Los zu kaufen, mit einem Verlust von 60 Pips, also Break Even in Dollar ausgedrückt.

Wenn Sie sich genau an mein Beispiel halten, sollten Sie bei 1,4164 insgesamt 6 Pips Gewinn haben.

Bei 1,4164 (ohne Berücksichtigung der Spreads) haben wir 2 Verkaufspartien mit einem Gewinn von je 36 Pips und 1 Kaufpartie mit einem Verlust von 54 Pips, also einen Gewinn von 72 Pips durch Verkäufe und einen Verlust von 54 Pips durch Käufe. Insgesamt haben Sie für die Gruppe von Geschäften 3 Lose mit einem Gewinn von 18 Pips. Es ist also vernünftiger, wenn Sie jetzt einen Gewinn von 6 Pips erzielen.

Allerdings werden die Dinge wieder wegen der Spreads kompliziert. Denn wenn der Geldkurs bei 1,4164 liegt und der Briefkurs vielleicht bei 1,4166, dann haben Ihre Verkäufe jeweils nur einen Gewinn von 34 Pips. Insgesamt für die Gruppe von Geschäften, haben Sie 3 Lose mit einem Gewinn von 14 Pips. Sie haben also tatsächlich 4,7 Pips Gewinn gemacht.

Wenn ich dieses Beispiel einen Schritt weiter führe, wenn wir 2 Käufe und 3 Verkäufe haben. Dann erreichen Sie bei 1,4164 die Gewinnschwelle.

Wenn wir die Spreads nicht berücksichtigen, dann brauchen wir 30 Pips Gesamtgewinn, um 5 Pips Gewinn pro Lot zu haben. Die 6 Pips Gewinn wären also bei einem Preis von 1,4134, ist das korrekt?

In Ihrem System wird es diese Art von Situation wahrscheinlich nicht geben, es ist das Prinzip, das ich erreichen möchte. Sind Sie mit der obigen Berechnung einverstanden?

Christina,

ich stimme zu, Sie haben mit beiden Berechnungen 100% Recht!

 

Hallo, Michael,

ich bin in den letzten Tagen viel zu beschäftigt, ich habe das schon gemacht, aber ich brauche mehr Zeit, um es zusammenzustellen. Ich werde es hier posten, sobald ich in den nächsten Tagen etwas Zeit dafür finde. Chrisitna

 
 
christinaLi:
Hi, Michael, ich bin in den letzten Tagen viel zu beschäftigt, ich habe das schon gemacht, aber ich brauche mehr Zeit, um es zusammenzustellen. Ich werde es hier posten, sobald ich in den nächsten Tagen etwas Zeit dafür finde. Chrisitna

Hallo Christina,

kein Problem, nehmen Sie sich Zeit, ich freue mich immer über Ihre Anregungen!

Michael

 
 

Ich brauche Hilfe

Hallo, alle zusammen!

Dies ist meine Idee:i brauchen 2 Indikator-Puffer in separate_Fenster,1 ist devupBuffer[];2 ist devdwBuffer[]. Wenn ich zum Beispiel fünf digitale 1,2,3,4,5 habe, ist der Durchschnitt 3.Dann sind die Daten größer als der Durchschnitt von 3 4 und 5 devupBuffer={【(4-Durchschnitt)*(4-Durchschnitt)】+【(5-Durchschnitt)*(5-Durchschnitt)】}/Standardabweichung(1,2,3,4,5)*Standardabweichung(1,2,3,4,5).Daten sind kleiner als der Durchschnitt von 3 1 und 2 devdwBuffer={【(1-Durchschnitt)*(1-Durchschnitt)】+【(2-Durchschnitt)*(2-Durchschnitt)】}/Standardabweichung(1,2,3,4,5)*Standardabweichung(1,2,3,4,5).

 

warum kann dieser EA nicht kaufen oder verkaufen?

Hallo, ich bin wirklich neu in dieser Programmierung mit Meta... bitte helfen Sie...

Ich arbeite mit einem System auf Stochastics mit zwei Ebenen, 25 und 75...

nur EIN Handel...

wenn der MAIN und das SIGNAL beide unter 25 liegen und sich kreuzen, KAUFEN.

wenn der MAIN und das SIGNAL über 25 kreuzen, KAUFEN SCHLIESSEN.

wenn das MAIN und das SIGNAL beide über 75 liegen und sich kreuzen, VERKAUFEN.

wenn sich die Haupt- und die Signalkurve kreuzen (sie müssen nicht unter 75 liegen), VERKAUFEN SCHLIESSEN.

Das war's...

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

//| StochCross.mq4 |

//| RobertEli |

//| http://www.metaquotes.net |

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

#property copyright "RobertEli"

#property link "http://www.metaquotes.net"

//--- input parameters

extern double TakeProfit=250.0;

extern double Lots=0.01;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Confirm (double line1, double line2, int level_buy, int level_sell)

{

static int confirmation = 0;

if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy

if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell

if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy

if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell

//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY

//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL

//else return (0);

return (confirmation);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 > line2) current_direction = 1; //UP

if (line1 < line2) current_direction = 2; //DOWN

if (current_direction != last_direction) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket;

double Stoch_main, Stoch_sign;

if (Bars < 100)

{

Print("BARS less than 100");

return (0);

}

if (TakeProfit < 10)

{

Print("TakeProfit less than 10");

return (0);

}

/*

Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);

*/

Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);

Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);

/*

Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);

Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);

*/

int isCrossed = Crossed(Stoch_main,Stoch_sign);

int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);

int total = OrdersTotal();

if (total == 0)

{

if ((isCrossed == 1) && (isConfirmed == 1))

{

ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());

else Print ("Error Opening BUY Order: ", GetLastError());

return (0);

}

}

if ((isCrossed == 2) && (isConfirmed == 2))

{

ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);

if (ticket > 0)

{

if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());

else Print ("Error Opening SELL Order: ", GetLastError());

return (0);

}

}

return (0);

}

else

{

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

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())

{

if (OrderType() == OP_BUY) //the trade was a Buy position

{ //check for closing)

if ((isCrossed == 2) && (isConfirmed == 3))

//if (isCrossed == 2)

{ //change of direction

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position

return (0);

}

}

else // the trade was a SELL position

{

//should it be closed?

//if ((isCrossed == 1) && (isConfirmed == 4))

if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed

return (0);

}

}

}

}

}

//----

return(0);

}

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

EA kann nicht tun, was es tun soll, HILFE!

Hallo, ich bin wirklich neu in diesem mq4 Programmierung, aber ich habe gelesen codersgurus Tutorials (vielen Dank!), so dass ich denke, ich kann etwas verstehen... Wie auch immer, ich habe diesen EA gemacht, der auf MOVING AVERAGES basiert... ABER ES FUNKTIONIERT NICHT SO, WIE ES SEIN SOLLTE!

die Regeln hier sind sehr einfach...

1. MA_04_1H (bedeutet gleitender Durchschnitt Periode 4 für 1 Stunde Zeitrahmen) kreuzt über MA_14_1H,

Bestätigen Sie dies mit MA_04_4H über MA_14_4H (der Trend ist aufwärts) ------> KAUFEN!

2. MA_04_1H kreuzt unter MA_14_1H,

Bestätigen Sie dies, wenn MA_04_4H unter MA_14_4H liegt (der Trend ist abwärts gerichtet)------> VERKAUFEN!

3. wenn MA_04_1H mit MA_14_1H kreuzt, schließen Sie diese Order (Sie können eine neue Order starten, wenn Sie die Regeln #1 und #2 beachten)

4. nur ein Handel... (wenn BUY, schließe diesen BUY. danach SELL, wenn nötig)

Ich habe 2 Funktionen erstellt: Crossed und Confirmed.

Crossed ist für den 1-Stunden-Zeitrahmen.

Confirmed ist für den 4-Stunden-Zeitrahmen.

Kann mir jemand beim Debuggen dieser Funktion helfen?

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

//| MACross1TradeOnly.mq4 |

//| RobertEli |

//| |

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

// this will work on MA_04, and MA__14

#property copyright "RobertEli"

#property link ""

extern double Lots = 0.01;

extern int stoploss_value = 10; // $10

bool up = 0, //UP direction, when MA_04 is above MA_14

down = 0, //DOWN direction, when MA_14 is above MA_04

change = 0, //when the MA_04 and MA_14 cross

firsttime = true; //first time for direction_prev

int direction_curr = 0; // 1 if UP, 2 if down...

int direction_prev = 0; // this will hold previous value of direction_curr

int direction_trend= 0; // trend direction for confirmation

int cross = 0; // if direction_curr and direction_prev changes course

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1, double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if (line1 - line2 > 0)//(line1 > line2)

{

current_direction = 1; //UP

if (firsttime == true)

{

current_direction = 0;

last_direction = 1;

firsttime = false;

return (0);

}

}

if (line1 - line2 < 0)//(line1 < line2)

{

current_direction = 2; //DOWN

if (firsttime == true)

{

current_direction = 0;

last_direction = 2;

firsttime = false;

return (0);

}

}

if ((current_direction != last_direction) && (firsttime == false)) //changed direction

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (last_direction);

}

}

int Confirmed (double line1, double line2)

{

int trend;

if (line1 > line2) trend = 1; // trend direction is UP

if (line1 < line2) trend = 2; // trend direction is DOWN

return (trend);

}

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

//| expert start function |

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

int start()

{

//----

int cnt,ticket, total;

//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period

if (Bars < 100) { Print ("Bars less than 100."); return (0); }

double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);

double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);

double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);

//double stoploss = stoploss_value / (Lots * 100000);

//new code from v_1

cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN

direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN

total = OrdersTotal();

if (total == 0)

{

if((cross == 1) && (direction_trend == 1))

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);

if(ticket>0)

{

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

}

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

cross = 0;

return(0);

}

if((cross == 2) && (direction_trend == 2))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);

if(ticket>0)

{

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

}

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

cross = 0;

return(0);

}

}

if (total == 1)

{

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

// bool no_buy_sell = ((OrderTakeProfit() 0));

if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position

//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);

return (0);

}

else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position

//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);

return (0);

}

}

}

else return (0);

//----

return(0);

}

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

Bitte ignorieren Sie den vorherigen Beitrag von mir... ich habe diese Idee verworfen... ich arbeite jetzt daran... also bitte helfen Sie...