|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
||||
Hier ein Tipp, welchen du evlt. noch nicht bekommen hast, dir aber vielleicht all diese Probleme erspart:
EasyLanguage EasyLanguage ist eine vereinfachte Form einer Programmiersprache, aber bestimmt für 80-90 % der allgemeinen Tradingansätze ausreichend. Plattformen, welche das könnten sind z.B.: -TradeStation -MultiCharts -??? Können evlt. was kosten oder sind vielleicht bei dem einen oder anderen Broker mit dabei, weiß ich aber leider nicht, kannst du aber selbst gerne rausfinden. Wenn du einen Broker gefunden haben solltest, welcher dir eine auf EasyLanguage-Basierende Plattform kostenlos zur Verfügung stellt, dann schreib es hier mal ruhig rein. Könnte ja sein, dass wir so noch ein paar Leute auf die dunkle, einfachere Seite der Macht führen Hier noch ein Link zu einem Buch übers Trading mit EasyLanguage: https://www.amazon.de/Tradestation-M.../dp/0471353531 Gruß und viel Erfolg dabei! |
|
|||||
Zitat:
Warum stellst Du Fragen, wenn Dich die Antworten nicht interessieren? Zitat:
Man benutzt NIEMALS Bar 0 für Schlußkurse, weil das die aktuelle Bar ist. Aktuell heißt, diese Bar ist gerade dabei, ihre Gestalt anzunehmen - also einen oberen Docht und eine unterer Lunte und einen Körper zu erzeugen. Und solange diese Bar nicht beendet ist, verändert sich alles an ihr außer dem Eröffnungskurs (das ist der allerste Kurs dieser Bar). Was die anderen Wert der Bar sind, weißt man erst in dem Moment, wenn die Zeit für die Bar abgelaufen ist und der Eröffnungskurs der nächsten Bar feststeht. Erst dann kann man für die ehemalige Bar 0 (die jetzt Bar 1 ist, weil es eine neue Bar 0 gibt) sagen, wo denn der Höchst-/Tiefst- und Schlußkurs gewesen wäre <= wäre weil man das während sich die Bar entwickelt nicht wissen kann. Das hat nichts, aber auch gar nichts mit Repainting zu tun, sondern damit daß die Bar sich während ihrer Laufzeit verändert!! Zitat:
Zitat:
Zitat:
Schon das Grundprinzip ist falsch, aber da Du ja Dein eigenes Ding auf Teufel komm raus durchziehen willst, ist es unnütz, das zu diskutieren. Und einen Experten anheuern kannst Du nur dann, wenn Du ganz exakte Vorgaben machst - bei Deiner Vorgehensweise kann wahrscheinlich auch der beste Experte nichts ausrichten. Aber dann ist der natürlich wieder Schuld. So, mehr habe ich nicht anzumerken. AVT |
|
|||
Was ich meinte, ist, dass Vieles eben nicht so umgesetzt werden kann, wie ich es mir vorstelle. Das passiert doch Jedem mal...
Ich hoffe mal, dass das so funktioniert. Gibts nen anderen Weg, festzustellen, aus welcher Richtung z.B. der CCI oder ein andere Oszillator oder Indikator oder was auch immer kommt? Das würde bestimmt so manches Fehlsignal vermeiden. Man könnte vielleicht versuchen, festzustellen, aus welcher Richtung der Kurs kommt. Aber die Indikatoren sollen ja Diesen "filtern", und so umrechnen, dass aus dem Kursverlauf eben eindeutige Handelssignale dargestellt und erkannt werden können... Code:
//============================================================================================================= // C O M M O D I T Y C H A N N E L I N D E X //============================================================================================================= double CCI=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price,1); ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CCI down Curve int CCI_Bar_do=2; double CCI_do=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_do ); // Wenn "normaler" CCI kleiner als obere Linie ist, und CCI_do(Bar2) größer als "normaler" CCI ist... if( CCI<CCI_IL_2 && CCI_do>CCI ){ // und CCI_do (noch Bar2) auch kleiner als obere Linie ist, soll Kerze des CCI_Bar_do um 1 erhöht werden, // bis er nicht mehr kleiner als die obere Linie ist. if( CCI_do<CCI_IL_2 )CCI_Bar_do++;} ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CCI up Curve int CCI_Bar_up=2; double CCI_up=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_up ); // Wenn "normaler" CCI größer als untere Linie ist, und CCI_up(Bar2) kleiner als "normaler" CCI ist... if( CCI>CCI_IL_1 && CCI_up<CCI ){ // und CCI_up (noch Bar2) auch größer als untere Linie ist, soll Kerze des CC_Bar_up um 1 erhöht werden, // bis er nicht mehr größer als die untere Linie ist. if( CCI_up>CCI_IL_1 )CCI_Bar_up++;} Code:
//============================================================================================================= // O P E N O R D E R S //============================================================================================================= if(iT_Tr==iT_NB){ if(Hour()>=From_Hour&&Minute()>=From_Min&&Hour()<=Till_Hour&&Minute()<=Till_Min){ double SPR=Ask-Bid; //aktueller Spread if(NormalizeDouble(SPR<=Max_Spr*_Point,_Digits)){ ////////////////////////////////////////////////////////////////////////////////////////////////////////////// bool SH=false; bool LO=false; for(int i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MN_Sel)SH=true; if(OrderMagicNumber()==MN_Buy)LO=true;}}} ////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(open_Sel==true&&SH==false){ if( CCI<CCI_IL_2 &&CCI_do>CCI_up&& RSI<RSI_IL_2 && RVI_Ma<RVI_Si && WPR<WPR_IL_1 ){ if(IsTradeAllowed()==true)OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_Sel,Blue); if(IsTradeContextBusy()==true)Sleep(Sl_MS); Print( "Sended Sel:", "-CCI_do=",CCI_do , "-CCI_up=",CCI_up , "-CCI_Bar_do=",CCI_Bar_do , "-CCI_Bar_up=",CCI_Bar_up ); CCI_Bar_do=2; CCI_Bar_up=2; Print( "Sended Sel:", "-CCI_Bar_do=",CCI_Bar_do , "-CCI_Bar_up=",CCI_Bar_up ); }} ////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(open_Buy==true&&LO==false){ if( CCI>CCI_IL_1 &&CCI_up>CCI_do&& RSI>RSI_IL_1 && RVI_Ma>RVI_Si && WPR>WPR_IL_2 ){ if(IsTradeAllowed()==true)OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_Buy,Blue); if(IsTradeContextBusy()==true)Sleep(Sl_MS); Print( "Sended Buy:", "-CCI_up=",CCI_up , "-CCI_do=",CCI_do , "-CCI_Bar_up=",CCI_Bar_up , "-CCI_Bar_do=",CCI_Bar_do ); CCI_Bar_up=2; CCI_Bar_do=2; Print( "Sended Buy:", "-CCI_Bar_up=",CCI_Bar_up , "-CCI_Bar_do=",CCI_Bar_do ); }} |
|
|||
Hallo.
Habs heute so versucht, aber er hat in 7 Stunden überhaupt nix gemacht. Keine einzige Order geöffnet und irgendwelche Fehler gabs glaub ich auch nicht. Geht wohl, wenn überhaupt, nur mit ner Scleife. Code:
double CCI=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price,1); ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CCI down Curve int CCI_Bar_do=2; double CCI_do=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_do ); // Wenn "normaler" CCI kleiner als obere Linie ist, und CCI_do(Bar2) größer als "normaler" CCI ist... if( CCI<CCI_IL_2 && CCI_do>CCI ){ // und CCI_do (noch Bar2) auch kleiner als obere Linie ist, soll Kerze des CCI_Bar_do um 1 erhöht werden, // bis er nicht mehr kleiner als die obere Linie ist. if( CCI_do<CCI_IL_2 )CCI_Bar_do++;} ////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CCI up Curve int CCI_Bar_up=2; double CCI_up=iCCI(Symbol(),TF_Trading,CCI_Period,CCI_Price, CCI_Bar_up ); // Wenn "normaler" CCI größer als untere Linie ist, und CCI_up(Bar2) kleiner als "normaler" CCI ist... if( CCI>CCI_IL_1 && CCI_up<CCI ){ // und CCI_up (noch Bar2) auch größer als untere Linie ist, soll Kerze des CC_Bar_up um 1 erhöht werden, // bis er nicht mehr größer als die untere Linie ist. if( CCI_up>CCI_IL_1 )CCI_Bar_up++;} |
|
|||
Zitat:
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hallo.
Gestern hat mein EA mal wieder 2stellig Gewinn gemacht. Hier und da noch ein paar Ergänzungen und einiges an Feinschliff, und ich werd ihn wohl nächstes Jahr auf nen Forex-Live-Konto los lassen. Es sind nur noch Commodity Channel Index und Stochastic drin. Die beiden müssten noch mal genau eingestellt werden. Um möglichst Seitwärtsbewegungen zu vermeiden, soll er auf Bar1 Price High, Price Close und Price Low jeweils voneinander abziehen. Bevor eine Order raus geschickt wird, soll geprüft werden, ob diese Abstände >= wie die int Werte sind, die man in den GV eintragen kann. Code:
extern string esMDHtC1="Min Distance"; extern string esMDHtC2="Price High"; extern string esMDHtC3="to"; extern string esMDHtC4="Price Close"; extern int MD_Hi_Cl=8; extern string esMDHtL1="Min Distance"; extern string esMDHtL2="Price High"; extern string esMDHtL3="to"; extern string esMDHtL4="Price Low"; extern int MD_Hi_Lo=8; extern string esMDCtL1="Min Distance"; extern string esMDCtL2="Price Close"; extern string esMDCtL3="to"; extern string esMDCtL4="Price Low"; extern int MD_Cl_Lo=8; Code:
double HP=iHigh(Symbol(),TF_Trading,1); double CP=iClose(Symbol(),TF_Trading,1); double LP=iLow(Symbol(),TF_Trading,1); double HP_CP=HP-CP; double HP_LP=HP-LP; double CP_LP=CP-LP; |
|
|||
Hallo.
CCI und Stochastic scheinen sehr empfindlich zu sein. Dabei sollen Indikatoren ja eigentlich Seitwärtsphasen auslassen. Relative Strength Index und Relative Vigor Index scheinen da besser zu sein. Hat Jemand Tipps zu denen? Um Einstiegssignale zu bestätigen, sollen je nach Buy/Sell Ask/Bid mit ClosePrice1 verglichen werden. Es soll erst geöffnet werden, wenn ein einstellbarer Abstand (derzeit 8) überschritten wurde. Aber ich weiß nicht, obs so gut ist, ClosePrice1 mit Bid oder Ask zu vergleichen, bzw. mit den ganzen Berechnungen Vergleiche anzustellen. Code:
// Distance Ask/Bid zu OpenPrice0 extern string esDABOP1="Distance"; extern string esDABOP2="Ask/Bid"; extern string esDABOP3="to"; extern string esDABOP4="Close Price Bar 1"; extern int Dist_Ask_CP=8; // Zum Testen extern int Dist_CP_Bid=8; // 8 Code:
double CP=iClose(Symbol(),TF,1); // Mit Ask / Bid vergleichen // Für Sell ClosePrice1 - Bid rechnen. double CP_Bid=CP-Bid; // Für Buy Ask - ClosePrice1 rechnen. double Ask_CP=Ask-CP; // Für Sell CP - Dist_CP_Bid(GV). Ergebnis ergibt sozusagen eine "Linie". // Wenn CP_Bid darunter ist, darf Sell geöffnet werden. double CP_DCPB=NormalizeDouble( CP - Dist_CP_Bid*_Point,_Digits ); double CP_DACP=NormalizeDouble( CP + Dist_Ask_CP*_Point,_Digits ); Code:
if( RSI<RSI_IL_2 && RVI_Ma<RVI_Si && CP_Bid<CP_DCPB ){... -Send Sell if( RSI>RSI_IL_1 && RVI_Ma>RVI_Si && Ask_CP>CP_DACP ){... -Send Buy- |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|