Alles um Metatrader 4.0 - Handelsmethoden und Indikatoren

      Was soll der Geiz, ich stell den Code mal hier rein, war eh nur ne Übung.

      Brainfuck-Quellcode

      1. //+------------------------------------------------------------------+
      2. //| _vikke @ www.candletalk.de Pips_Calculator.mq4 |
      3. //| |
      4. //+------------------------------------------------------------------+
      5. #property copyright "_vikke @ www.candletalk.de"
      6. #property indicator_chart_window
      7. extern int Balance = 10000;
      8. extern double Risk = 3.0;
      9. extern color Color1 = Aqua;
      10. extern color Color2 = Yellow;
      11. extern int Font_Size = 13;
      12. extern string Font = "Courier";
      13. string x_per_str[] = {" PIPS","EURUSD","EURJPY","EURGBP","USDCHF","USDCAD","GBPUSD","AUDUSD"};
      14. string pip_array[] = {" 12"," 15"," 20", " 25", " 30", " 35", " 40", " 45", " 50"};
      15. double pip_a[] = {12,15,20,25,30,35,40,45,50};
      16. //---------------------------------------------------------------------
      17. int init(){
      18. return(0);
      19. }
      20. //---------------------------------------------------------------------
      21. int deinit(){
      22. ObjectsDeleteAll(0, OBJ_LABEL);
      23. return(0);
      24. }
      25. //----------------------------------------------------------------------
      26. int start(){
      27. double maxriskeuro = Balance*Risk/100;
      28. double multi;
      29. double eurusd = iClose("EURUSD",0,0);
      30. double euraud = iClose("EURAUD",0,0);
      31. double eurcad = iClose("EURCAD",0,0);
      32. double eurgbp = iClose("EURGBP",0,0);
      33. if(Symbol() == "EURUSD")multi=1;
      34. if(Symbol() == "EURJPY")multi=1;
      35. if(Symbol() == "EURGBP")multi=1;
      36. if(Symbol() == "USDCHF")multi=eurusd;
      37. if(Symbol() == "AUDUSD")multi=euraud;
      38. if(Symbol() == "USDCAD")multi=eurusd;
      39. if(Symbol() == "GBPUSD")multi=eurgbp;
      40. int x,y;
      41. for(x=0;x<1;x++)
      42. for( y=0;y<9;y++)
      43. {
      44. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr((maxriskeuro/(10/(iClose("EURUSD",0,y))*pip_a[y]))*100,1), Font_Size, Font, Color1);
      45. }
      46. for(x=1;x<2;x++)
      47. for( y=0;y<9;y++)
      48. {
      49. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr((maxriskeuro/(10/(iClose("EURJPY",0,y))*pip_a[y]))*1,1), Font_Size, Font, Color1);
      50. }
      51. for(x=2;x<3;x++)
      52. for( y=0;y<9;y++)
      53. {
      54. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr((maxriskeuro/(10/(iClose("EURGBP",0,y))*pip_a[y]))*100,1), Font_Size, Font, Color1);
      55. }
      56. for(x=3;x<4;x++)
      57. for( y=0;y<9;y++)
      58. {
      59. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr(((maxriskeuro/(10/(iClose("USDCHF",0,y))*pip_a[y]))*100)*multi,1), Font_Size, Font, Color1);
      60. }
      61. for(x=4;x<5;x++)
      62. for( y=0;y<9;y++)
      63. {
      64. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr(((maxriskeuro/(10/(iClose("USDCAD",0,y))*pip_a[y]))*100)*multi,1), Font_Size, Font, Color1);
      65. }
      66. for(x=5;x<6;x++)
      67. for( y=0;y<9;y++)
      68. {
      69. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr(((maxriskeuro/(10/(iClose("GBPUSD",0,y))*pip_a[y]))*100)*multi,1), Font_Size, Font, Color1);
      70. }
      71. for(x=6;x<7;x++)
      72. for( y=0;y<9;y++)
      73. {
      74. create_obj("ss"+x+y, x*80+80, y*20+40, DoubleToStr(((maxriskeuro/(10/(iClose("AUDUSD",0,y))*pip_a[y]))*100)*multi,1), Font_Size, Font, Color1);
      75. }
      76. //------------------------------------
      77. for(y=0;y<9;y++)
      78. {
      79. create_obj("pip"+y, x, y*20+40, pip_array[y], Font_Size, Font, Color2);
      80. }
      81. for(x=0;x<8;x++)
      82. {
      83. create_obj("perString"+x, x*80, y+10, x_per_str[x], Font_Size, Font, Color2);
      84. }
      85. return(0);
      86. }
      87. //-------------------------------------------------------------------------------------------------------------------------------------
      88. void create_obj(string obj_name, int x_dist, int y_dist, string dbl_var, int font_size, string font, color color_)
      89. {
      90. ObjectCreate(obj_name,OBJ_LABEL,0,0,0,0,0);
      91. ObjectSet(obj_name,OBJPROP_XDISTANCE,x_dist);
      92. ObjectSet(obj_name,OBJPROP_YDISTANCE,y_dist);
      93. ObjectSetText(obj_name,dbl_var, font_size, font, color_);
      94. }
      Das Script wird einmal ausgeführt, es plottet eine horizontale Linie und stellt den Abstand vom Bid zu der Linie dar, auch wird der Preis der Horizontalen angezeigt. Die Linie kann man nach einem Doppelklick darauf verschieben, die Pips variieren dann natürlich. Das Script lässt sich somit gut für manuelle Sizebestimmung nutzen.
      Man könnte jetzt natürlich noch PosSize anhand prozentualer AccountSize mit einbauen, somit hätte man immer die passende Size parat.

      Wer 5 Digits haben will einfach bei folgenden Zeilen ersetzen:

      CreateText("Pips",Time[0],price,_textColor,DoubleToStr(MathAbs((Bid-price)/Point),0));
      CreateText2("Price",Time[0],price2,_textColor,DoubleToStr(MathAbs((Bid-price2)-Bid),5));

      Brainfuck-Quellcode

      1. // _vikke @ www.candletalk.de
      2. extern color _textColor=Lime;
      3. extern int _sleepTimeMS=50;
      4. bool _isRunning=false;
      5. string _fullName;
      6. string _objPips="Pips";
      7. string _objPrice="Price";
      8. int start()
      9. {
      10. ObjectDelete("x");
      11. ObjectCreate("x",OBJ_HLINE,0,0,Bid);
      12. ObjectSet("x",OBJPROP_BACK,true);
      13. ObjectSet("x",OBJPROP_COLOR,Red);
      14. //-------------------------------
      15. if(!_isRunning){
      16. Iterate();
      17. }
      18. DeleteLabels(_objPips);
      19. DeleteLabels(_objPrice);
      20. return (0);
      21. }
      22. void DoJob(){
      23. int obj_total=ObjectsTotal();
      24. string name;
      25. DeleteLabels(_objPips);
      26. DeleteLabels(_objPrice);
      27. for(int i=0;i<obj_total;i++)
      28. {
      29. name=ObjectName(i);
      30. if(ObjectType(name)==OBJ_HLINE){
      31. double price = ObjectGet(name, OBJPROP_PRICE1) ;
      32. double price2 = ObjectGet(name, OBJPROP_PRICE1) ;
      33. CreateText("Pips",Time[0],price,_textColor,DoubleToStr(MathAbs((Bid-price)/Point/10),0));
      34. CreateText2("Price",Time[0],price2,_textColor,DoubleToStr(MathAbs((Bid-price2)-Bid),4));
      35. }
      36. }
      37. }
      38. void Iterate() {
      39. _isRunning=true;
      40. while(!IsStopped())
      41. {
      42. RefreshRates();
      43. DoJob();
      44. Sleep(_sleepTimeMS);
      45. }
      46. }
      47. void CreateText(string name, datetime time1, double price,color boxcolor, string text){
      48. ObjectDelete(name);
      49. if(!ObjectCreate(name, OBJ_TEXT,0, time1, price))
      50. {
      51. Print("error: cant create OBJ_TEXT! code #",GetLastError());
      52. return(0);
      53. }
      54. ObjectSetText(name, text, 10, "Verdana", boxcolor);
      55. }
      56. void CreateText2(string name, datetime time1, double price,color boxcolor, string text){
      57. ObjectDelete(name);
      58. if(!ObjectCreate(name, OBJ_TEXT,0, time1, price))
      59. {
      60. Print("error: cant create OBJ_TEXT! code #",GetLastError());
      61. return(0);
      62. }
      63. ObjectSetText(name, " "+text, 10, "Verdana", boxcolor);
      64. }
      65. void DeleteLabels(string objPref){
      66. int obj_total=ObjectsTotal();
      67. string name;
      68. for(int i=0;i<obj_total;i++)
      69. {
      70. name=ObjectName(i);
      71. if(StringFind(name, objPref,0)>-1){
      72. ObjectDelete(name);
      73. i--;
      74. }
      75. }
      76. }
      77. //+------------------------------------------------------------------+
      Bilder
      • 2012-09-14_191550.png

        6,28 kB, 784×472, 234 mal angesehen
      @PT

      Das mit der Sicherheit von fremden DLLs macht mir auch sorgen, habe zwar Scanner drüberlaufen lassen, jedoch sagt das nichts aus, da auch einfach nur die Trades oder ähnliches versendet werden könnten.

      Wo Du nun schon recht erfahren bist in der Programmierung, könntest Du dieses Paket doch für ein paar Euro anbieten, ggf. auch über Introducing Broker, die alle irgendwas Schönes brauchen, um sich abzuheben, so ähnlich wie das TT mit seinem Once-Klick-Trader bei QTrade macht.


      Hier überschätzt du meine Fähigkeiten bei weitem, ich habe beide C Büchlein nur zur Hälfte gelesen, da ist noch viel was Faulheit mir vorenthält. Auch hätte ich gar keine Interesse am kommerziellen Programmieren, da ich ausschließlich handeln will, nur eben fehlen oft die passenden Tools.

      Trade_Buttons

      Hab mal ne kleine EA gemacht, die aber zur Zeit nur mit EURUSD und GBPUSD geht, da ich momentan für einzelnen Berechnungen keine Lust habe. Ob die Close_All korrekt läuft muss sich auch erst am Sonntagabend zeigen. Naja, die Trades gehen zumindest, viel Spaß;-)

      C-Quellcode

      1. //+------------------------------------------------------------------+
      2. //| TradeButtons |
      3. //| Copyright © 2012, _vikke |
      4. //| http://www.candletalk.de |
      5. //+------------------------------------------------------------------+
      6. #include <stdlib.mqh>
      7. #import "mt4gui.dll"
      8. string tbVersion();
      9. // objects "button","checkbox","list","label","text"
      10. int tbPutObject(int,string,int,int,int,int,string); // hwnd,type,x,y,w,h,label
      11. // colors
      12. int tbSetBgColor(int,int,int); // hwnd,object,bgcolor
      13. int tbSetTextColor(int,int,int); // hwnd,object,color
      14. // removing objects
      15. int tbRemove(int,int); // hwnd,handle
      16. int tbRemoveAll(int); // hwnd
      17. // events
      18. bool tbIsClicked( int,int ); // hwnd,object
      19. bool tbIsChecked(int,int); // hwnd,object
      20. // properties
      21. int tbSetText(int,int,string,int,string); // hwnd,object,text,fontsize,fontname
      22. string tbGetText(int,int); // hwnd,object
      23. int tbSetChecked(int,int,int); // hwnd,object,0|1
      24. int tbEnable(int,int,int); // hwnd, object, 0|1
      25. // listbox
      26. int tbAddListItem(int,int,string); // hwnd,object,item
      27. int tbGetListSel(int,int); // hwnd,object
      28. int tbSetListSel(int,int,int); // hwnd,object,index
      29. #import
      30. int L10_btn,L15_btn,L20_btn,L25_btn,L30_btn,L35_btn,L40_btn,S10_btn,S15_btn,S20_btn,S25_btn,S30_btn,S35_btn,S40_btn,Close_All_btn;
      31. int hwnd = 0;
      32. double Lots, TP, SL, acc_balance, max_risk;
      33. int ticket=0, ticket2=0, error=0, x=-110;
      34. //--------------------------------------------------------------------------------------------
      35. int init()
      36. {
      37. hwnd=WindowHandle(Symbol(),Period());
      38. tbRemoveAll(hwnd);
      39. Close_All_btn= tbPutObject(hwnd,"button",-205,134+x,160,50,"Close All");
      40. L10_btn= tbPutObject(hwnd,"button",-205,188+x,77,30,"10");
      41. S10_btn= tbPutObject(hwnd,"button",-123,188+x,77,30,"10");
      42. L15_btn= tbPutObject(hwnd,"button",-205,222+x,77,30,"15");
      43. S15_btn= tbPutObject(hwnd,"button",-123,222+x,77,30,"15");
      44. L20_btn= tbPutObject(hwnd,"button",-205,256+x,77,30,"20");
      45. S20_btn= tbPutObject(hwnd,"button",-123,256+x,77,30,"20");
      46. L25_btn= tbPutObject(hwnd,"button",-205,290+x,77,30,"25");
      47. S25_btn= tbPutObject(hwnd,"button",-123,290+x,77,30,"25");
      48. L30_btn= tbPutObject(hwnd,"button",-205,324+x,77,30,"30");
      49. S30_btn= tbPutObject(hwnd,"button",-123,324+x,77,30,"30");
      50. L35_btn= tbPutObject(hwnd,"button",-205,358+x,77,30,"35");
      51. S35_btn= tbPutObject(hwnd,"button",-123,358+x,77,30,"35");
      52. L40_btn= tbPutObject(hwnd,"button",-205,392+x,77,30,"40");
      53. S40_btn= tbPutObject(hwnd,"button",-123,392+x,77,30,"40");
      54. tbSetBgColor(hwnd,Close_All_btn,Silver); tbSetTextColor(hwnd,Close_All_btn,Black);
      55. tbSetBgColor(hwnd,L10_btn,Green); tbSetTextColor(hwnd,L10_btn,White);
      56. tbSetBgColor(hwnd,L15_btn,Green); tbSetTextColor(hwnd,L15_btn,White);
      57. tbSetBgColor(hwnd,L20_btn,Green); tbSetTextColor(hwnd,L20_btn,White);
      58. tbSetBgColor(hwnd,L25_btn,Green); tbSetTextColor(hwnd,L25_btn,White);
      59. tbSetBgColor(hwnd,L30_btn,Green); tbSetTextColor(hwnd,L30_btn,White);
      60. tbSetBgColor(hwnd,L35_btn,Green); tbSetTextColor(hwnd,L35_btn,White);
      61. tbSetBgColor(hwnd,L40_btn,Green); tbSetTextColor(hwnd,L40_btn,White);
      62. tbSetBgColor(hwnd,S10_btn,Red); tbSetTextColor(hwnd,S10_btn,White);
      63. tbSetBgColor(hwnd,S15_btn,Red); tbSetTextColor(hwnd,S15_btn,White);
      64. tbSetBgColor(hwnd,S20_btn,Red); tbSetTextColor(hwnd,S20_btn,White);
      65. tbSetBgColor(hwnd,S25_btn,Red); tbSetTextColor(hwnd,S25_btn,White);
      66. tbSetBgColor(hwnd,S30_btn,Red); tbSetTextColor(hwnd,S30_btn,White);
      67. tbSetBgColor(hwnd,S35_btn,Red); tbSetTextColor(hwnd,S35_btn,White);
      68. tbSetBgColor(hwnd,S40_btn,Red); tbSetTextColor(hwnd,S40_btn,White);
      69. return(0);
      70. }
      71. int deinit()
      72. {
      73. tbRemoveAll(WindowHandle(Symbol(),Period()));
      74. Print ("DEINIT COMPLETED");
      75. return(0);
      76. }
      77. int start()
      78. {
      79. int trade_modus, trade_side, trade_side2;
      80. int pips=0;
      81. if (tbIsClicked(hwnd,L10_btn)) {ticket =1; pips = 10; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      82. if (tbIsClicked(hwnd,L15_btn)) {ticket =1; pips = 15; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      83. if (tbIsClicked(hwnd,L20_btn)) {ticket =1; pips = 20; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      84. if (tbIsClicked(hwnd,L25_btn)) {ticket =1; pips = 25; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      85. if (tbIsClicked(hwnd,L30_btn)) {ticket =1; pips = 30; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      86. if (tbIsClicked(hwnd,L35_btn)) {ticket =1; pips = 35; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      87. if (tbIsClicked(hwnd,L40_btn)) {ticket =1; pips = 40; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
      88. if (tbIsClicked(hwnd,S10_btn)) {ticket =1; pips = 10; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      89. if (tbIsClicked(hwnd,S15_btn)) {ticket =1; pips = 15; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      90. if (tbIsClicked(hwnd,S20_btn)) {ticket =1; pips = 20; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      91. if (tbIsClicked(hwnd,S25_btn)) {ticket =1; pips = 25; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      92. if (tbIsClicked(hwnd,S30_btn)) {ticket =1; pips = 30; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      93. if (tbIsClicked(hwnd,S35_btn)) {ticket =1; pips = 35; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      94. if (tbIsClicked(hwnd,S40_btn)) {ticket =1; pips = 40; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
      95. acc_balance = AccountBalance();
      96. max_risk = 3;
      97. double Pipwert=10/Close[0];
      98. double Maxriskeuro =acc_balance*max_risk/1000;
      99. Lots = (Maxriskeuro/Pipwert/pips)*10;
      100. TP = 500;
      101. SL = (pips/10000);
      102. ticket=OrderSend(Symbol(),trade_modus,Lots,trade_side,5,0,0,0,0,0,CLR_NONE);
      103. if(ticket<1)
      104. {
      105. error=GetLastError();
      106. Print("Error = ",ErrorDescription(error));
      107. }
      108. else
      109. {
      110. OrderSelect(ticket,SELECT_BY_TICKET);
      111. OrderModify(ticket,OrderOpenPrice(),trade_side2 - SL, 0,0);
      112. OrderPrint();
      113. }
      114. //------------------------------------------------------------------------------------------------
      115. //bool result = false;
      116. if(tbIsClicked(hwnd,Close_All_btn)) {
      117. int type = OrderType();
      118. bool result = false;
      119. switch(type)
      120. {
      121. //Close opened long positions
      122. case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
      123. break;
      124. //Close opened short positions
      125. case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
      126. break;
      127. //Close pending orders
      128. case OP_BUYLIMIT :
      129. case OP_BUYSTOP :
      130. case OP_SELLLIMIT :
      131. case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
      132. }
      133. if(result == false)
      134. {
      135. Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      136. Sleep(3000);
      137. }
      138. }
      139. //----------------------------------------------------------------------------------------------
      140. return(0);
      141. }
      142. //+------------------------------------------------------------------+
      Bilder
      • 2012-09-09_140141.png

        7,18 kB, 914×349, 227 mal angesehen
      fx1.net/wiki/pmwiki.php/MT4GUI/MT4GUI

      Mit diesen DLLs lassen sich Buttons auf einen MT4 Chart legen, so könnte man das lästige Scriptfenster umgehen und aus dem Chart heraus die Orders tätigen. Mache das momentan noch über Scripts, jedoch ist dies Möglichkeit sehr verführend^^
      Dateien

      Abdocken von Charts und diese außerhalb des Metatraders platzieren

      Von IBFX hat es ein Script, um Charts außerhalb des Metatraders platzieren zu können.

      1) 'IBFX – Undock chart.ex4' in den MT4/experts/scripts Ordner kopieren
      2) 'MT4iConnect.dll' in MT4/experts/libraries Ordner kopieren
      3) Das Skript auf den Chart anwenden und Chart nach Belieben platzieren
      Dateien
      • IBFX Tools.zip

        (118,03 kB, 226 mal heruntergeladen, zuletzt: )
      Die Datenqualität ist mit Sicherheit nicht mehr top notch. Nach der Übernahme durch Optionsxpress 2008 gings etwas bergab und man merkt, dass nicht mehr jedes Tick ankommt.
      If you don't bet, you can't win.
      If you lose all your chips, you can't bet.


      - Larry Hite -

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

      The Trend is your only Friend :D

      - einer, der Bescheid weiß -