Trading-Stocks.de

Normale Version: Broker zum Forex Scalpen und Hedgen mit Metatrader 4
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3

Valerius

Hallo.

Hab so ne Art Hedge-Scalper für den Metatrader 4 gemacht. Ist im Anhang. Der soll ständig long und short investiert sein. Sobald eine Richtung geschlossen wurde, soll gleich die nächste Order in selbige geöffnet werden. Die großen Verluste einer Richtung sollen am Ende durch viele kleine, schnelle Gewinne wieder rein geholt werden + Gewinn.

Frag mich gerade, ob eine Funktion rein sollte, die alle Orders zu einer bestimmten Zeit schließt. Da er ja nur zu bestimmter Zeit öffnen darf, wär das vielleicht nicht schlecht. Wonder

Aber auf jeden Fall bräuchte man nen Forex-Broker, bei dem man wie man will ständig in beide Richtungen investiert sein kann. Wenn eine Order geschlossen wurde, muss er sofort die Nächste in entsprechende Richtung öffnen können und immer so weiter. Bei meinem Jetzigen brauchts immer etliche Sekunden, bis die Nächste geöffnet wird.
Habe mich nicht mit deinem Quelltext beschäftigt aber deine verbale Beschreibung klingt unlogisch. Wenn Du nach schneller Gewinnmitnahme gleich wieder eine Position in gleicher Richtung eröffnest wäre es besser gleich in der Position zu bleiben weil Du 2x Transaktionskosten sparst. Und woher weißt Du denn ob der Kurs steigen oder fallen wird? Weil nur wenn Du das weißt kannst Du eine Richtung stärker Gewichten und damit einen Gewinn erreichen. Da bist Du wohl wieder bei der Frage aller Fragen an der Börse: In welche Richtung wird der Kurs laufen?  Irony

Valerius

Mein Gedanke dahinter ist, dass es egal ist, wohin der Kurs geht. Hauptsache, es gibt Bewegung. Um möglichst Jede davon mitzunehmen, bleibt man ständig long und short investiert. Bzw. öffnet nach jeder Gewinn-Order gleich ne neue in die selbe Richtung. Zum Feierabend haben dann die vielen kleinen Gewinne den Verlust als auch den Spread der größeren, aber viel selteneren Verluste wieder drin.

Weiß nicht genau, aber ich denke, die vielen kleinen Gewinn-Trades müssen "nur" den eigenen Spread + Spreads der wenigen Verlust-Trades rein bringen. Dazu natürlich noch ein paar Pipen Gewinn. Aber ich hab mich damit jetzt auch noch nicht sooo viel befasst... Confused

Und wenn das System so nicht funktioniert, kann mans immer noch zum Absichern bei anderen Strategien benutzen. Hoffe ich.   Wonder   Rolleyes

Aber wenn Hedgen überhaupt nix bringen würde, würde es ja auch nicht eingeschränkt werden vom Broker...

Ich brauche also nen Broker, bei dem man wie gesagt ständig gleichzeitig auf Long und Short setzen kann. Wird eine Order einer Richtung geschlossen, muss sofort die nächste Order in die selbe Richtung geöffnet werden (können).

Im Anhang noch mal der MT4 EA.

Valerius

Hallo.

Kann es sein, dass gestern, am 10.4. die Forex Spreads wild hin- und her- gingen? Mein EA hat ewig (teilweise über ne halbe Stunde Eek ) gebraucht, um die nächste Order zu öffnen und ich kann mir das eigentlich nur so erklären, dass die Spreads oft über seiner Begrenzung von 20 waren. Wonder

Valerius

Hallo.

Hab den Code weiß ich wie oft durch geguckt und es kann eigentlich bloß noch an ActivTrades liegen, dass er nicht durchgehend Long und Short im Markt ist. Ich brauche einen Broker, bei dem man nach dem Schließen einer Richtung sofort die nächste Order in die selbe Richtung öffnen kann. Im Anhang eine verbesserte Print-Version. Es ist im Grunde eine Art Martin Gale. Allerdings wird hier der Einsatz nur erhöht, wenn die letzte Order einer Richtung Gewinn gemacht hat. Wenn nicht, bleibt der Einsatz gleich. Das Prinzip kann grundsätzlich funktionieren, hat mal an einem Tag über 100 Teuro Gewinn gemacht. Aber eben nur, wenn er nach dem Schließen einer Order sofort die Nächste in die selbe Richtung öffnet. Und das geht wohl nicht bei jedem Broker. Also wär ich echt dankbar für möglichst deutsche Broker, oder wenigstens Welche mit einem Sitz in DL, bei dem man Long und Short gleichzeitig sein kann wie man will.
Bitte nicht als Werbung verstehen. Ich hatte meinen EA damals von folgendem Kollegen programmieren lassen

mindful FX UG
www.mindfulfx.de/ea-programmierung
ea@mindfulfx.de

Er ist auf MT4 spezialisiert und kann dir so ziemlich alles zaubern was du brauchst. MT5 kann er auch, ist aber teurer.
Du musst dir halt nur im klaren sein welche Strategie du dort zu Papier bringst und es muss alles bis ins kleinste Detail durchdefiniert sein.

Ich bin damals ganz froh gewesen die Programmierung an ihn abgegeben zu haben, sonst hätte ich eine Menge Arbeit rein gesteckt und nachher wäre das Ergebnis sowieso wie folgt gewesen: Strategie funktionierte nicht.
So habe ich zumindest nur die Kosten dafür versenkt, aber das war akzeptables Lehrgeld. Und der Umsatz sei ihm gegönnt, der kann wirklich was.

Den Fall den du hast habe ich damals so programmieren lassen, das zu jedem neuen Tick überprüft wird ob eine Position offen ist und falls nicht: Position eröffnen.
Im Forex Handel wird es niemals passieren das im normalen Handel eine Position länger als 1Tick hängen bleibt.

Valerius

Danke für den Tip. Aber wie gesagt kann ich hier wirklich keine Fehler finden. Jedenfalls Keine, die dafür sorgen, dass das Teil mal sofort ne neue Order öffnet, wie es soll, und dann wieder teilweise ne halbe Stunde dafür braucht... Wer diesen Fehler findet, kann ihn mir wirklich mit größtem Vergnügen unter die Nase reiben... Sarcblink


Nachtrag: Ist es eigentlich nötig, bei OrderSelect() den OrderType() anzugeben? Da es für Buy und Sell jeweils ne extra MagicNumber gibt, müsste die für OrderSelect() doch eigentlich reichen. OrderType() müsste man doch eigentlich weg lassen können. Confused


//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
// #property strict
// #property strict sorgt anscheinend dafür, dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.

#property copyright"LoSh_AlwInv_Dist_V2.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string TOY="true = on / yes";
extern string FON="false = off / no";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================

//-----------------------------------------------------------------------------------------------------------*/

extern string OPORTY="Open Order Types";
input bool open_Buy=true;
input bool open_Sel=true;

//-----------------------------------------------------------------------------------------------------------*/

extern string MN="Magic Numbers";
extern int MN_Buy=2;
extern int MN_Sel=4;

//-----------------------------------------------------------------------------------------------------------*/

extern string OOO1="Open Orders";
extern string OOO2="from/till";
extern string OOO3="(Server Time)";

extern int Open_From_Hour=7;
extern int Open_From_Min=0;

extern int Open_Till_Hour=17;
extern int Open_Till_Min=26;

//-----------------------------------------------------------------------------------------------------------*/

extern string CAOTOC1="Close all Orders after";
extern string CAOTOC2="(Server Time)";

extern bool Close_all_Orders_after=true;

extern int Close_after_Hour=17;
extern int Close_after_Min=27;

//-----------------------------------------------------------------------------------------------------------*/

extern int Slippage=99999999;

//-----------------------------------------------------------------------------------------------------------*/

extern double LotsBuy=0.01;
extern double LotsSel=0.01;

extern string esLPOCP1="Lots Buy/Lots Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01; //

//-----------------------------------------------------------------------------------------------------------*/

extern int SL=2000; // 2000 testen

//-----------------------------------------------------------------------------------------------------------*/

extern int TP=2400; // Zum Testen 2300

//-----------------------------------------------------------------------------------------------------------*/

extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep Milli Seconds";

extern int Sl_MS=25;

//-----------------------------------------------------------------------------------------------------------*/

extern string esDOPtAB1="Distance to";
extern string esDOPtAB2="Order Open Price";
extern string esDOPtAB3="close Win-Order";
extern string esDOPtAB4="If close with Profit";
extern string esDOPtAB5="Lots Buy + Lots Sel /";
extern string esDOPtAB6="Lots Sel + Lots Buy";

extern int Dist = 50; // Zum Testen 50. Weniger als 50 ist wahrscheinlich nicht ausreichend?

//-----------------------------------------------------------------------------------------------------------*/


//=============================================================================================================
// I N I T / D E I N I T
//=============================================================================================================
int init(){
  return(NULL);}
int deinit(){
  return(NULL);}
//=============================================================================================================
// E A  F U N K T I O N E N  S T A R T
//=============================================================================================================int
int start(){
//=============================================================================================================
// L O T S
//=============================================================================================================


double Min_L=MarketInfo(Symbol(),MODE_MINLOT);
double Max_L=MarketInfo(Symbol(),MODE_MAXLOT);

if(LotsBuy<Min_L)LotsBuy=Min_L;
if(LotsSel<Min_L)LotsSel=Min_L;

if(LotsBuy>=Max_L){
  LotsBuy=Max_L;
  LotsPlus=0.0;}

if(LotsSel>=Max_L){
  LotsSel=Max_L;
  LotsPlus=0.0;}


//=============================================================================================================
// S T O P  L O S S
//=============================================================================================================


//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  double Buy_SL=0.0;
  double Sel_SL=0.0;}

  else{
    Buy_SL=NormalizeDouble(Ask-SL*_Point,_Digits);
    Sel_SL=NormalizeDouble(Bid+SL*_Point,_Digits);}

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Buy_SL<MSL)Buy_SL=MSL;
if(Sel_SL<MSL)Sel_SL=MSL;


//=============================================================================================================
// T A K E  P R O F I T
//=============================================================================================================


//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  double Buy_TP=0.0;
  double Sel_TP=0.0;}

  else{
    Buy_TP=NormalizeDouble(Ask+TP*_Point,_Digits);
    Sel_TP=NormalizeDouble(Bid-TP*_Point,_Digits);}


//=============================================================================================================
// C L O S E  D I S T A N C E  B E R E C H N U N G
//=============================================================================================================


double CLbuy_D = NormalizeDouble( Bid - Dist *_Point,_Digits);

double CLsel_D = NormalizeDouble( Ask + Dist *_Point,_Digits);


//=============================================================================================================
// O P E N  O R D E R S
//=============================================================================================================


if(Hour()>=Open_From_Hour&&Minute()>=Open_From_Min&&Hour()<=Open_Till_Hour&&Minute()<=Open_Till_Min){


//-----------------------------------------------------------------------------------------------------------*/


  if(open_Buy==true){

    bool LO=false;
    for(int i=OrdersTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderType()==OP_BUY&&OrderMagicNumber()==MN_Buy&&OrderSymbol()==Symbol())LO=true;}}

    if(LO==false&&IsTradeAllowed()==true)OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,MN_Buy,Blue);
    if(IsTradeContextBusy()==true)Sleep(Sl_MS);

}


//-----------------------------------------------------------------------------------------------------------*/


  if( open_Sel==true ){

    bool SH=false;
    for(int j=OrdersTotal()-1;j>=0;j--){
      if(OrderSelect(j,SELECT_BY_POS)){
        if(OrderType()==OP_SELL&&OrderMagicNumber()==MN_Sel&&OrderSymbol()==Symbol())SH=true;}}

    if(SH==false&&IsTradeAllowed()==true)OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,MN_Sel,Blue);
    if(IsTradeContextBusy()==true)Sleep(Sl_MS);

}

//-----------------------------------------------------------------------------------------------------------*/

}


//=============================================================================================================
// C L O S E  O R D E R S
//=============================================================================================================


if(open_Buy==true){

  for(int k=OrdersTotal()-1;k>=0;k--){
    if(OrderSelect(k,SELECT_BY_POS)){
      if(OrderType()==OP_BUY&&OrderMagicNumber()==MN_Buy&&OrderSymbol()==Symbol()){

        if( ( CLbuy_D > OrderOpenPrice() ) ||(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min) ){

          if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);

          if(IsTradeContextBusy()==true)Sleep(Sl_MS);

          LotsBuy = OrderLots() + LotsPlus;

          if( LotsBuy <= LotsSel )LotsBuy = LotsSel + LotsBuy;

} } } } }


//-----------------------------------------------------------------------------------------------------------*/


if(open_Sel==true){

  for(int l=OrdersTotal()-1;l>=0;l--){
    if(OrderSelect(l,SELECT_BY_POS)){
      if(OrderType()==OP_SELL&&OrderMagicNumber()==MN_Sel&&OrderSymbol()==Symbol()){
     
        if( ( CLsel_D < OrderOpenPrice() ) ||(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min) ){

          if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);

          if(IsTradeContextBusy()==true)Sleep(Sl_MS);
       
          LotsSel = OrderLots() + LotsPlus;

          if( LotsSel <= LotsBuy )LotsSel = LotsBuy + LotsSel;

} } } } }


//=============================================================================================================
// E A  F U N K T I O N E N  B E E N D E N
//=============================================================================================================
return(NULL);}
Wenn ein Fehler auftritt liefert OrderSend -1 zurück, das solltest du mal abfragen.
Falls das so ist dann mit GetLastError den Fehlercode auslesen und anzeigen lassen.
In der MQL Hilfe gibts eine Liste mit allen Fehlercodes das hilt evtl weiter.
Oder mal eine Debug-Info in ein Debug-Log oder Logdatei schreiben um mal zu sehen ob dein Code an den entsprechenden Zeilen der Ordereröffnung überhaupt vorbei kommt.

Exchange Vision

Den bot kannst du dir eigentlich sparen. Der wettet im Prinzip nur auf Autokorrelation und das kannst du besser und billiger haben, wenn du einfach nur einen Straddle kaufst und das Delta hedged.

Die vielen kleinen Verluste vom bot = Zeitwertverfall
Die wenigen großen Gewinner vom bot = long Gamma

Kleinere options gibts auf FXE, das ist ein ETF....kann sich jeder leisten, die Dinger.

Mit dem Bot machst du nur den Bucketshop reich.
Seiten: 1 2 3