Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36907
Benutzer: 6.074
Aktive Benutzer: 496
Links: 80
Wir begrüßen unseren neuesten Benutzer: hmf44
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 8 Stunden
- hmf44
vor 12 Stunden
- Crossa
vor 13 Stunden
- snatshit
vor einem Tag
- Roerich
vor einem Tag
- John_Liver...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 56
Gesamt: 57
Team: 0
Team:  
Benutzer:  Stier
Freunde anzeigen

Empfehlungen

Werbung

Like Tree2Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 21.02.12
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Bobs Beitrag anzeigen
Und wo die Funktion Hour ()?
Hour habe ich dazu benutzt um einzustellen ob wir 1,2,3,4...Uhr haben. Die ordersend Funktion sollte gewährleisten, dass zu den vollen Stunden dann auch eine marktorder Long und Short zum jeweiligen opening generiert wird...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #12 (permalink)  
Alt 23.02.12
Benutzerbild von sandmann23
Mitglied
 
Registriert seit: Feb 2012
Beiträge: 67
sandmann23 befindet sich auf einem aufstrebenden Ast
sandmann23 eine Nachricht über Skype™ schicken
Standard

Hi,

datetime closetime;
if (OrderType() == OP_BUY)
{
oldticket = OrderTicket();
bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);
openbuy = openbuy-1; //openbuy--;
}

if(Close == true)
{
if(OrderSelect(oldticket,SELECT_BY_TICKET) == true)
{
closetime = OrderCloseTime();
if(closetime <= 0)
closetime =0;
}
}

//BuyOrder
// eröffnet nur alle 60min einen Trade
// 60min != 1H Kerze
//
if(TimeLocal() - closetime >= 3600) //für 60*60 = 60min
// zweite Version
//mindestens 60min zwischen trades oder beginn neue Stundenkerze
//if(TimeLocal() - closetime >= 3600 || Time60M() == true) //für 60*60 = 60min
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"Kompensation buy",MagicNumber,0,Green);
if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}

ungechecked und buggy as hell, soll nur eine Konzept Idee liefern

Gruss
sandmann
Mast83 likes this.
  #13 (permalink)  
Alt 23.02.12
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard Mr Sandman bring me your dream :)

Erst mal vielen Dank für die Konzept Idee Ich bin derzeit folgender Maßen gekommen und habe da Problem, dass jetzt nur openbuyorders generiert werden, aber keine opensell...warum?

Code:
//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=0;
extern int BuyMagicNumber=1;
extern int SellMagicNumber=2;
extern int TradeHour0=0;
extern int TradeHour1=1;
extern int TradeHour2=2;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour5=5;
extern int TradeHour6=6;
extern int TradeHour7=7;
extern int TradeHour8=8;
extern int TradeHour9=9;
extern int TradeHour10=10;
extern int TradeHour11=11;
extern int TradeHour12=12;
extern int TradeHour13=13;
extern int TradeHour14=14;
extern int TradeHour15=15;
extern int TradeHour16=16;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour19=19;
extern int TradeHour20=20;
extern int TradeHour21=21;
extern int TradeHour22=22;
extern int TradeHour23=23;
extern int StopLoss=50;
extern int TakeProfit=100;
extern int MaxTradePerBarLong=1;
extern int MaxTradePerBarShort=1;
datetime Time0;
int TradePerBarLong=1;
int TradePerBarShort=1;
int BarCountLong=-1;
int BarCountShort=-1;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;

int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
Time0=Time[0];
return(0);
}


//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);

//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
 Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);


//BuyOrder
if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && openbuy == 0 &&(TradePerBarLong<=MaxTradePerBarLong)) //Signal Buy
if (BarCountLong!=Bars){TradePerBarLong=0;BarCountLong=Bars;}
  {
   if (Time0!=Time[0])
   {
    openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"Kompensation buy",BuyMagicNumber,0,Green); 
    if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
        Time0=Time[0];
            if(TradePerBarLong>0)TradePerBarLong++;
   } 
  }
  return(0);
//SellOrder
if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && opensell == 0 &&(TradePerBarShort<=MaxTradePerBarShort)) //Signal Buy
if (BarCountShort!=Bars){TradePerBarShort=0;BarCountShort=Bars;}
  {
   if (Time0!=Time[0])
   {
    opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"Kompensation sell",SellMagicNumber,0,Red);
    if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() );
        Time0=Time[0];
            if(TradePerBarShort>0)TradePerBarShort++;
   } 
  }
return(0);
}

//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}
Dick markiert und unterstrichen sind die Passagen, die aktuell dafür Sorge tragen sollten jeweils eine long und short Order zu eröffnen...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #14 (permalink)  
Alt 24.02.12
Benutzerbild von sandmann23
Mitglied
 
Registriert seit: Feb 2012
Beiträge: 67
sandmann23 befindet sich auf einem aufstrebenden Ast
sandmann23 eine Nachricht über Skype™ schicken
Standard

Hi,

liegt an dem ersten return(0);

Muss weg, oder innerhalb der if Abfrage bei openbuy


Gruss
sandmann

Den EA bitte nur auf einem demokonto nutzen oder zum backtesten. Du machst dich ansonsten unglücklich
  #15 (permalink)  
Alt 24.02.12
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von sandmann23 Beitrag anzeigen
Hi,

liegt an dem ersten return(0);

Muss weg, oder innerhalb der if Abfrage bei openbuy


Gruss
sandmann

Den EA bitte nur auf einem demokonto nutzen oder zum backtesten. Du machst dich ansonsten unglücklich
Hallöchen Nochmals vielen Dank...daran habe ich gestern auch gedacht und das erste return in der openbuy Funktion weg genommen....aber ich muss sagen es wurden trotzdem nur die openbuys und nicht die opensells ausgeführt^^
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #16 (permalink)  
Alt 24.02.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

mit setzen der Buy Order machst du ein Time0 = Time[0].
Deshalb ist für die Sell Order eben nicht mehr Time0 != Time[0].

Gruß
naranjoe
  #17 (permalink)  
Alt 24.02.12
Elite Mitglied
 
Registriert seit: Aug 2011
Ort: NRW
Beiträge: 764
Mast83 befindet sich auf einem aufstrebenden Ast
Mast83 eine Nachricht über ICQ schicken Mast83 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von naranjoe Beitrag anzeigen
Hallo,

mit setzen der Buy Order machst du ein Time0 = Time[0].
Deshalb ist für die Sell Order eben nicht mehr Time0 != Time[0].

Gruß
naranjoe
Hallo Naranjoe...würde es dann reichen aus der openbuy Order die Tim0=Time[0] heraus zu nehmen?
Oh mann ich habe sie sogar 4 mal drin ^^
dann müsste ich ja aus dem gesamten openbuy-Block den Befehl heraus nehmen oder?
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...
  #18 (permalink)  
Alt 24.02.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Sorry,

aber ich kann das nicht mehr mit ansehen wie diese doch relativ einfach Sache verkompliziert wird.
Dein EA wird immer unübersichtlicher.
Ich habe hier mal deinen Ansatz etwas kompakter verwirklicht:
Code:
extern int TradeHour0=0;
extern int TradeHour1=1;
extern int TradeHour2=2;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour5=5;
extern int TradeHour6=6;
extern int TradeHour7=7;
extern int TradeHour8=8;
extern int TradeHour9=9;
extern int TradeHour10=10;
extern int TradeHour11=11;
extern int TradeHour12=12;
extern int TradeHour13=13;
extern int TradeHour14=14;
extern int TradeHour15=15;
extern int TradeHour16=16;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour19=19;
extern int TradeHour20=20;
extern int TradeHour21=21;
extern int TradeHour22=22;
extern int TradeHour23=23;
extern int StopLoss = 20;
extern int TakeProfit = 20;
int ActiveLongHour = 25;
int ActiveShortHour = 25;
int Slippage = 3;
double Lot = 0.1;
int MagicNumber = 12345;


void init()
{
}

void start()
{
 if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && ActiveLongHour != Hour()){
      int ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"Kompensation buy",MagicNumber,0,Green); 
      if (ticket < 0) {
        Print("OrderSend OP_BUY failed, error: ", GetLastError());
        }
      else {
        ActiveLongHour = Hour();
        }    
 }

 if ((TradeHour1==Hour())||(TradeHour2==Hour())||(TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour5==Hour())||(TradeHour6==Hour())||(TradeHour7==Hour())||(TradeHour8==Hour())||(TradeHour9==Hour())||(TradeHour10==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour15==Hour())||(TradeHour16==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour19==Hour())||(TradeHour20==Hour())||(TradeHour21==Hour())||(TradeHour22==Hour())||(TradeHour23==Hour())||(TradeHour0==Hour()) && ActiveShortHour!=Hour()){
      ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"Kompensation sell",MagicNumber,0,Red);
      if (ticket < 0) {
        Print("OrderSend OP_SELL failed, error: ", GetLastError() );
        }
      else {
        ActiveShortHour = Hour();
      }
 } 

 for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
       {
       if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol())
         { 
          OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), Slippage);                         
         }
       }
    }
 

}
Ich hoffe das läuft jetzt so wie es soll.
Musst nur noch deinen Code drumherum schreiben.

Gruß
naranjoe
Thema geschlossen

Lesezeichen

Stichworte
ea, expert-advisor, mql4, programmierung, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------