|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Zitat:
Code:
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- double b= 10745.75,tp,offset=0.5; tp=NormalizeDouble(b+offset,2); Alert(DoubleToString(tp,3)); Print(DoubleToString(tp,3)); } //+------------------------------------------------------------------+ |
|
|||
Zitat:
Code:
double TP_Prozent=10.0; double TakeProfit=NormalizeDouble(10744.25*(1+(TP_Prozent/100.0)),2); double TP=TakeProfit; double Nachkomma=TakeProfit-TP; weil TP=TakeProfit; TakeProfit-TP=0 wenn int TP , kommt warning int TP=(int)TakeProfit; richtig Geändert von pako (26.01.15 um 21:52 Uhr) |
|
|||
Ne, wenn
double TP=TakeProfit; double Nachkomma=TakeProfit-TP; Dann wird Nachkomma immer 0 sein! Also, es muß bei int TP = TakeProfit; bleiben. Getestet und ohne Warning! traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Code:
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- double a=0.25,b= 10744.75,tp,offset=0.5; int cnt =15; for(int y=0;y<cnt;y++) { a+=0.25; tp=NormalizeDouble((b+a)+offset,2); Alert(DoubleToString(tp,3)); Print(DoubleToString(tp,3)); } } //+------------------------------------------------------------------+ |
|
|||
Zitat:
int TP = TakeProfit; kommt warning int TP = (int)TakeProfit; keine warning |
|
||||
OK, jetzt bin ich offiziell Verwirrt
werd das alles jetzt einfach mal irgendwie durchtesten und sag dann bescheid was davon funktioniert hat aber auf jeden fall schon mal ein danke |
|
|||
Nimm diese Version:
Code:
double TP_Prozent = 10.0; double TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100.0)),2); int TP = (int)TakeProfit; //zur Sicherheit! double Nachkomma = TakeProfit - TP; if (Nachkomma <= 0.12) TakeProfit = TP; if (Nachkomma > 0.12 && Nachkomma <= 0.37) TakeProfit = TP + 0.25; if (Nachkomma > 0.37 && Nachkomma <= 0.62) TakeProfit = TP + 0.5; if (Nachkomma > 0.62 && Nachkomma <= 0.87) TakeProfit = TP + 0.75; if (Nachkomma > 0.87) TakeProfit = TP + 1.0;
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
||||
hmmm ich hab jetzt mal versucht das einzubauen ....
aber irgendwo liegt in meinem Code noch der Hund begraben es wurde kein einziger SL/TP gesetzt hier mal das Journal seit heute morgen: 2015.01.28 16:17:00.724 '2715450': order #21939548 sell 0.10 EUREX.FDX at 10616.25 sl: 0.00 tp: 0.00 closed at price 10691.75 2015.01.28 16:17:00.665 '2715450': close order #21939548 sell 0.10 EUREX.FDX at 10616.25 sl: 0.00 tp: 0.00 at price 0.00 2015.01.28 12:11:03.993 '2715450': order was opened : #21939548 sell 0.10 EUREX.FDX at 10616.25 sl: 0.00 tp: 0.00 2015.01.28 12:11:03.929 '2715450': order sell market 0.10 EUREX.FDX sl: 0.00 tp: 0.00 2015.01.28 12:11:03.929 '2715450': order #21939177 buy 0.10 EUREX.FDX at 10629.25 sl: 0.00 tp: 0.00 closed at price 10616.25 2015.01.28 12:11:03.871 '2715450': close order #21939177 buy 0.10 EUREX.FDX at 10629.25 sl: 0.00 tp: 0.00 at price 0.00 2015.01.28 11:08:03.220 '2715450': order was opened : #21939177 buy 0.10 EUREX.FDX at 10629.25 sl: 0.00 tp: 0.00 2015.01.28 11:08:03.160 '2715450': order buy market 0.10 EUREX.FDX sl: 0.00 tp: 0.00 2015.01.28 11:08:03.159 '2715450': order #21938400 sell 0.10 EUREX.FDX at 10717.50 sl: 0.00 tp: 0.00 closed at price 10629.25 2015.01.28 11:08:01.973 '2715450': close order #21938400 sell 0.10 EUREX.FDX at 10717.50 sl: 0.00 tp: 0.00 at price 0.00 2015.01.28 09:04:02.332 '2715450': order was opened : #21938400 sell 0.10 EUREX.FDX at 10717.50 sl: 0.00 tp: 0.00 2015.01.28 09:04:02.276 '2715450': order sell market 0.10 EUREX.FDX sl: 0.00 tp: 0.00 2015.01.28 07:20:53.117 Automated trading enabled bin mir jetzt nicht sicher ob ich die umrechnung in 0,25er Schritten falsch eingebunden habe oder ob das Problem auch noch an anderer Stelle liegen könnte Code:
void OnTick() { //--- double StoppLoss; double TakeProfit; bool OrderAngepasst; int TP; int SL; double NachkommaTP; double NachkommaSL; // Überprüfen ob ein neuer Periodenbeginn vorliegt if (PeriondenStartZeit != Time[0]) { NeuePeriodeBegonnen = true; PeriondenStartZeit = Time[0]; } else NeuePeriodeBegonnen = false; ... ……für Forum Ausgeblendetete Berechnungen - sonst wird der code zu unübersichtlich ...... ... //+------------------------------------------------------------------+ //| Kauf / Verkauf Signal umsetzen | //+------------------------------------------------------------------+ // Kaufen if(LongSignal == true) { // Evtl Short Order vorher Schließen if(ShortOrder>0) { if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true) { bool ShortOrderGeschlossen = OrderClose(ShortOrder,OrderLots(),Ask,10,Blue); if (ShortOrderGeschlossen==true) ShortOrder=0; Print("Short Order geschlossen bei ",AnzahlMA20); } } // Jetzt erst Long Order eröffnen while(LongOrder<=0) { LongOrder = OrderSend("EUREX.FDX",OP_BUY,HandelsLots,Ask,10,0,0,"Dax30 LONG",MagicNummer,0,Green); Print("Long Order geöffnet bei ",AnzahlMA20); } } // Verkaufen if (ShortSignal == true) { // Evtl Long Order vorher Schließen if (LongOrder>0) { if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true) { bool LongOrderGeschlossen = OrderClose(LongOrder,OrderLots(),Bid,10,Blue); if (LongOrderGeschlossen==true) LongOrder=0; Print("Long Order geschlossen bei ",AnzahlMA20); } } // Verkaufs Order jetzt eröffnen while(ShortOrder<=0) { ShortOrder = OrderSend("EUREX.FDX",OP_SELL,HandelsLots,Bid,10,0,0,"Dax30 SHORT",MagicNummer,0,Red); Print("Short Order geöffnet bei ",AnzahlMA20); } } //+------------------------------------------------------------------+ //|StopLoos und TakeProfit setzen | //+------------------------------------------------------------------+ // SL bei Long Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker // Umrechnung SL_Prozent in 0,25er Schritten StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_Prozent/100.0)),2); SL = (int)StoppLoss; //zur Sicherheit! NachkommaSL = StoppLoss - SL; if (NachkommaSL <= 0.12) StoppLoss = SL; if (NachkommaSL > 0.12 && NachkommaSL <= 0.37) StoppLoss = SL + 0.25; if (NachkommaSL > 0.37 && NachkommaSL <= 0.62) StoppLoss = SL + 0.5; if (NachkommaSL > 0.62 && NachkommaSL <= 0.87) StoppLoss = SL + 0.75; if (NachkommaSL > 0.87) StoppLoss = SL + 1.0; // SL bei Long Deals setzen if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true) { if(OrderCloseTime()==0 && OrderStopLoss()==0) { OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow); Print("SL für Long Order gesetzt bei = ",StoppLoss); } } // SL bei Short Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker // Umrechnung SL_Prozent in 0,25er Schritten StoppLoss = NormalizeDouble(OrderOpenPrice()*(1+(SL_Prozent/100.0)),2); SL = (int)StoppLoss; //zur Sicherheit! NachkommaSL = StoppLoss - SL; if (NachkommaSL <= 0.12) StoppLoss = SL; if (NachkommaSL > 0.12 && NachkommaSL <= 0.37) StoppLoss = SL + 0.25; if (NachkommaSL > 0.37 && NachkommaSL <= 0.62) StoppLoss = SL + 0.5; if (NachkommaSL > 0.62 && NachkommaSL <= 0.87) StoppLoss = SL + 0.75; if (NachkommaSL > 0.87) StoppLoss = SL + 1.0; // SL bei Short Deals setzen if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true) { if(OrderCloseTime()==0 && OrderStopLoss()==0) { OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow); Print("SL für Short Order gesetzt bei = ",StoppLoss); } } // TP bei Long Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker // Umrechnung TP_Prozent in 0,25er Schritten TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100.0)),2); TP = (int)TakeProfit; //zur Sicherheit! NachkommaTP = TakeProfit - TP; if (NachkommaTP <= 0.12) TakeProfit = TP; if (NachkommaTP > 0.12 && NachkommaTP <= 0.37) TakeProfit = TP + 0.25; if (NachkommaTP > 0.37 && NachkommaTP <= 0.62) TakeProfit = TP + 0.5; if (NachkommaTP > 0.62 && NachkommaTP <= 0.87) TakeProfit = TP + 0.75; if (NachkommaTP > 0.87) TakeProfit = TP + 1.0; // TP bei Long Deals setzen if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true) { if(OrderCloseTime()==0 && OrderTakeProfit()==0) { OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange); Print("TP für Long Order gesetzt bei = ",TakeProfit); } } // TP bei Short Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker // Umrechnung TP_Prozent in 0,25er Schritten TakeProfit = NormalizeDouble(OrderOpenPrice()/(1+(TP_Prozent/100.0)),2); TP = (int)TakeProfit; //zur Sicherheit! NachkommaTP = TakeProfit - TP; if (NachkommaTP <= 0.12) TakeProfit = TP; if (NachkommaTP > 0.12 && NachkommaTP <= 0.37) TakeProfit = TP + 0.25; if (NachkommaTP > 0.37 && NachkommaTP <= 0.62) TakeProfit = TP + 0.5; if (NachkommaTP > 0.62 && NachkommaTP <= 0.87) TakeProfit = TP + 0.75; if (NachkommaTP > 0.87) TakeProfit = TP + 1.0; // TP bei Short Deals setzen if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true) { if(OrderCloseTime()==0 && OrderTakeProfit()==0) { OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange); Print("TP für Short Order gesetzt bei = ",TakeProfit); } } // Ticketnummern nach schließen auf 0 zurücksetzen if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true) { if(OrderTicket()>0 && OrderCloseTime()>0) LongOrder=0; } if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true) { if(OrderTicket()>0 && OrderCloseTime()>0) ShortOrder=0; } |
Lesezeichen |
Stichworte |
digits, digits problem, mql4, nachkomma stellen, nachkomma stellen problem, nachkommastellen, programmierung, programmierung metatrader |
|
|