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
- //+------------------------------------------------------------------+
- //| _vikke @ www.candletalk.de Pips_Calculator.mq4 |
- //| |
- //+------------------------------------------------------------------+
- #property copyright "_vikke @ www.candletalk.de"
- #property indicator_chart_window
- extern int Balance = 10000;
- extern double Risk = 3.0;
- extern color Color1 = Aqua;
- extern color Color2 = Yellow;
- extern int Font_Size = 13;
- extern string Font = "Courier";
- string x_per_str[] = {" PIPS","EURUSD","EURJPY","EURGBP","USDCHF","USDCAD","GBPUSD","AUDUSD"};
- string pip_array[] = {" 12"," 15"," 20", " 25", " 30", " 35", " 40", " 45", " 50"};
- double pip_a[] = {12,15,20,25,30,35,40,45,50};
- //---------------------------------------------------------------------
- int init(){
- return(0);
- }
- //---------------------------------------------------------------------
- int deinit(){
- ObjectsDeleteAll(0, OBJ_LABEL);
- return(0);
- }
- //----------------------------------------------------------------------
- int start(){
- double maxriskeuro = Balance*Risk/100;
- double multi;
- double eurusd = iClose("EURUSD",0,0);
- double euraud = iClose("EURAUD",0,0);
- double eurcad = iClose("EURCAD",0,0);
- double eurgbp = iClose("EURGBP",0,0);
- if(Symbol() == "EURUSD")multi=1;
- if(Symbol() == "EURJPY")multi=1;
- if(Symbol() == "EURGBP")multi=1;
- if(Symbol() == "USDCHF")multi=eurusd;
- if(Symbol() == "AUDUSD")multi=euraud;
- if(Symbol() == "USDCAD")multi=eurusd;
- if(Symbol() == "GBPUSD")multi=eurgbp;
- int x,y;
- for(x=0;x<1;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- for(x=1;x<2;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- for(x=2;x<3;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- for(x=3;x<4;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- for(x=4;x<5;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- for(x=5;x<6;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- for(x=6;x<7;x++)
- for( y=0;y<9;y++)
- {
- 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);
- }
- //------------------------------------
- for(y=0;y<9;y++)
- {
- create_obj("pip"+y, x, y*20+40, pip_array[y], Font_Size, Font, Color2);
- }
- for(x=0;x<8;x++)
- {
- create_obj("perString"+x, x*80, y+10, x_per_str[x], Font_Size, Font, Color2);
- }
- return(0);
- }
- //-------------------------------------------------------------------------------------------------------------------------------------
- void create_obj(string obj_name, int x_dist, int y_dist, string dbl_var, int font_size, string font, color color_)
- {
- ObjectCreate(obj_name,OBJ_LABEL,0,0,0,0,0);
- ObjectSet(obj_name,OBJPROP_XDISTANCE,x_dist);
- ObjectSet(obj_name,OBJPROP_YDISTANCE,y_dist);
- ObjectSetText(obj_name,dbl_var, font_size, font, color_);
- }
-
-
-
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
- // _vikke @ www.candletalk.de
- extern color _textColor=Lime;
- extern int _sleepTimeMS=50;
- bool _isRunning=false;
- string _fullName;
- string _objPips="Pips";
- string _objPrice="Price";
- int start()
- {
- ObjectDelete("x");
- ObjectCreate("x",OBJ_HLINE,0,0,Bid);
- ObjectSet("x",OBJPROP_BACK,true);
- ObjectSet("x",OBJPROP_COLOR,Red);
- //-------------------------------
- if(!_isRunning){
- Iterate();
- }
- DeleteLabels(_objPips);
- DeleteLabels(_objPrice);
- return (0);
- }
- void DoJob(){
- int obj_total=ObjectsTotal();
- string name;
- DeleteLabels(_objPips);
- DeleteLabels(_objPrice);
- for(int i=0;i<obj_total;i++)
- {
- name=ObjectName(i);
- if(ObjectType(name)==OBJ_HLINE){
- double price = ObjectGet(name, OBJPROP_PRICE1) ;
- double price2 = ObjectGet(name, OBJPROP_PRICE1) ;
- CreateText("Pips",Time[0],price,_textColor,DoubleToStr(MathAbs((Bid-price)/Point/10),0));
- CreateText2("Price",Time[0],price2,_textColor,DoubleToStr(MathAbs((Bid-price2)-Bid),4));
- }
- }
- }
- void Iterate() {
- _isRunning=true;
- while(!IsStopped())
- {
- RefreshRates();
- DoJob();
- Sleep(_sleepTimeMS);
- }
- }
- void CreateText(string name, datetime time1, double price,color boxcolor, string text){
- ObjectDelete(name);
- if(!ObjectCreate(name, OBJ_TEXT,0, time1, price))
- {
- Print("error: cant create OBJ_TEXT! code #",GetLastError());
- return(0);
- }
- ObjectSetText(name, text, 10, "Verdana", boxcolor);
- }
- void CreateText2(string name, datetime time1, double price,color boxcolor, string text){
- ObjectDelete(name);
- if(!ObjectCreate(name, OBJ_TEXT,0, time1, price))
- {
- Print("error: cant create OBJ_TEXT! code #",GetLastError());
- return(0);
- }
- ObjectSetText(name, " "+text, 10, "Verdana", boxcolor);
- }
- void DeleteLabels(string objPref){
- int obj_total=ObjectsTotal();
- string name;
- for(int i=0;i<obj_total;i++)
- {
- name=ObjectName(i);
- if(StringFind(name, objPref,0)>-1){
- ObjectDelete(name);
- i--;
- }
- }
- }
- //+------------------------------------------------------------------+
-
-
@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. -
-
-
-
-
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
- //+------------------------------------------------------------------+
- //| TradeButtons |
- //| Copyright © 2012, _vikke |
- //| http://www.candletalk.de |
- //+------------------------------------------------------------------+
- #include <stdlib.mqh>
- #import "mt4gui.dll"
- string tbVersion();
- // objects "button","checkbox","list","label","text"
- int tbPutObject(int,string,int,int,int,int,string); // hwnd,type,x,y,w,h,label
- // colors
- int tbSetBgColor(int,int,int); // hwnd,object,bgcolor
- int tbSetTextColor(int,int,int); // hwnd,object,color
- // removing objects
- int tbRemove(int,int); // hwnd,handle
- int tbRemoveAll(int); // hwnd
- // events
- bool tbIsClicked( int,int ); // hwnd,object
- bool tbIsChecked(int,int); // hwnd,object
- // properties
- int tbSetText(int,int,string,int,string); // hwnd,object,text,fontsize,fontname
- string tbGetText(int,int); // hwnd,object
- int tbSetChecked(int,int,int); // hwnd,object,0|1
- int tbEnable(int,int,int); // hwnd, object, 0|1
- // listbox
- int tbAddListItem(int,int,string); // hwnd,object,item
- int tbGetListSel(int,int); // hwnd,object
- int tbSetListSel(int,int,int); // hwnd,object,index
- #import
- 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;
- int hwnd = 0;
- double Lots, TP, SL, acc_balance, max_risk;
- int ticket=0, ticket2=0, error=0, x=-110;
- //--------------------------------------------------------------------------------------------
- int init()
- {
- hwnd=WindowHandle(Symbol(),Period());
- tbRemoveAll(hwnd);
- Close_All_btn= tbPutObject(hwnd,"button",-205,134+x,160,50,"Close All");
- L10_btn= tbPutObject(hwnd,"button",-205,188+x,77,30,"10");
- S10_btn= tbPutObject(hwnd,"button",-123,188+x,77,30,"10");
- L15_btn= tbPutObject(hwnd,"button",-205,222+x,77,30,"15");
- S15_btn= tbPutObject(hwnd,"button",-123,222+x,77,30,"15");
- L20_btn= tbPutObject(hwnd,"button",-205,256+x,77,30,"20");
- S20_btn= tbPutObject(hwnd,"button",-123,256+x,77,30,"20");
- L25_btn= tbPutObject(hwnd,"button",-205,290+x,77,30,"25");
- S25_btn= tbPutObject(hwnd,"button",-123,290+x,77,30,"25");
- L30_btn= tbPutObject(hwnd,"button",-205,324+x,77,30,"30");
- S30_btn= tbPutObject(hwnd,"button",-123,324+x,77,30,"30");
- L35_btn= tbPutObject(hwnd,"button",-205,358+x,77,30,"35");
- S35_btn= tbPutObject(hwnd,"button",-123,358+x,77,30,"35");
- L40_btn= tbPutObject(hwnd,"button",-205,392+x,77,30,"40");
- S40_btn= tbPutObject(hwnd,"button",-123,392+x,77,30,"40");
- tbSetBgColor(hwnd,Close_All_btn,Silver); tbSetTextColor(hwnd,Close_All_btn,Black);
- tbSetBgColor(hwnd,L10_btn,Green); tbSetTextColor(hwnd,L10_btn,White);
- tbSetBgColor(hwnd,L15_btn,Green); tbSetTextColor(hwnd,L15_btn,White);
- tbSetBgColor(hwnd,L20_btn,Green); tbSetTextColor(hwnd,L20_btn,White);
- tbSetBgColor(hwnd,L25_btn,Green); tbSetTextColor(hwnd,L25_btn,White);
- tbSetBgColor(hwnd,L30_btn,Green); tbSetTextColor(hwnd,L30_btn,White);
- tbSetBgColor(hwnd,L35_btn,Green); tbSetTextColor(hwnd,L35_btn,White);
- tbSetBgColor(hwnd,L40_btn,Green); tbSetTextColor(hwnd,L40_btn,White);
- tbSetBgColor(hwnd,S10_btn,Red); tbSetTextColor(hwnd,S10_btn,White);
- tbSetBgColor(hwnd,S15_btn,Red); tbSetTextColor(hwnd,S15_btn,White);
- tbSetBgColor(hwnd,S20_btn,Red); tbSetTextColor(hwnd,S20_btn,White);
- tbSetBgColor(hwnd,S25_btn,Red); tbSetTextColor(hwnd,S25_btn,White);
- tbSetBgColor(hwnd,S30_btn,Red); tbSetTextColor(hwnd,S30_btn,White);
- tbSetBgColor(hwnd,S35_btn,Red); tbSetTextColor(hwnd,S35_btn,White);
- tbSetBgColor(hwnd,S40_btn,Red); tbSetTextColor(hwnd,S40_btn,White);
- return(0);
- }
- int deinit()
- {
- tbRemoveAll(WindowHandle(Symbol(),Period()));
- Print ("DEINIT COMPLETED");
- return(0);
- }
- int start()
- {
- int trade_modus, trade_side, trade_side2;
- int pips=0;
- if (tbIsClicked(hwnd,L10_btn)) {ticket =1; pips = 10; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,L15_btn)) {ticket =1; pips = 15; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,L20_btn)) {ticket =1; pips = 20; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,L25_btn)) {ticket =1; pips = 25; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,L30_btn)) {ticket =1; pips = 30; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,L35_btn)) {ticket =1; pips = 35; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,L40_btn)) {ticket =1; pips = 40; trade_modus=OP_BUY;trade_side=Ask;trade_side2=Bid;}
- if (tbIsClicked(hwnd,S10_btn)) {ticket =1; pips = 10; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- if (tbIsClicked(hwnd,S15_btn)) {ticket =1; pips = 15; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- if (tbIsClicked(hwnd,S20_btn)) {ticket =1; pips = 20; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- if (tbIsClicked(hwnd,S25_btn)) {ticket =1; pips = 25; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- if (tbIsClicked(hwnd,S30_btn)) {ticket =1; pips = 30; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- if (tbIsClicked(hwnd,S35_btn)) {ticket =1; pips = 35; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- if (tbIsClicked(hwnd,S40_btn)) {ticket =1; pips = 40; trade_modus=OP_SELL;trade_side=Bid;trade_side2=Ask;}
- acc_balance = AccountBalance();
- max_risk = 3;
- double Pipwert=10/Close[0];
- double Maxriskeuro =acc_balance*max_risk/1000;
- Lots = (Maxriskeuro/Pipwert/pips)*10;
- TP = 500;
- SL = (pips/10000);
- ticket=OrderSend(Symbol(),trade_modus,Lots,trade_side,5,0,0,0,0,0,CLR_NONE);
- if(ticket<1)
- {
- error=GetLastError();
- Print("Error = ",ErrorDescription(error));
- }
- else
- {
- OrderSelect(ticket,SELECT_BY_TICKET);
- OrderModify(ticket,OrderOpenPrice(),trade_side2 - SL, 0,0);
- OrderPrint();
- }
- //------------------------------------------------------------------------------------------------
- //bool result = false;
- if(tbIsClicked(hwnd,Close_All_btn)) {
- int type = OrderType();
- bool result = false;
- switch(type)
- {
- //Close opened long positions
- case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
- break;
- //Close opened short positions
- case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
- break;
- //Close pending orders
- case OP_BUYLIMIT :
- case OP_BUYSTOP :
- case OP_SELLLIMIT :
- case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
- }
- if(result == false)
- {
- Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
- Sleep(3000);
- }
- }
- //----------------------------------------------------------------------------------------------
- return(0);
- }
- //+------------------------------------------------------------------+
-
Ich weiß das die Rechte der weiter entwickelten Gui von einigen aus dem ff.de Forum gekauft wurden, oder sie sind zumindest an dem Geschäft beteiligt. Deswegen gibts den Link wo ich das Teil her habe, nämlich von Orginalautor:
forexfactory.com/showthread.php?p=5803423 -
-
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^^ -
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 -
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
- einer, der Bescheid weiß -
-
Teilen
- Facebook 0
- Twitter 0
- Google Plus 0
-
Reddit 0
-
Benutzer online 3
3 Besucher