Einzelnen Beitrag anzeigen
  #16 (permalink)  
Alt 06.02.12
Mast83 Mast83 ist offline
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
So wird das nix.
Zunächst stimmt das ">" nicht. Richtig muss die Zeile heissen
if((OrderOpenTime()+3600) < TimeCurrent()

Dann ist dein komplettes "OrderSelect" falsch, das kann so nicht funktionieren.

Außerdem fragst du beim setzen einer Order auch nicht ab, ob schon eine geöffnet ist. Dadurch werden permanent neue Order geöffnet.

Ich habe dir das mal soweit korrigiert
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=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//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);
}

//+------------------------------------------------------------------+
//| 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);
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
       if((OrderOpenTime()+3600) < TimeCurrent())
          { 
           if (OrderType() == OP_BUY)          
              {
               bool Closed = OrderClose(OrderTicket() ,OrderLots(), Ask, UseSlippage, Red);           
               openbuy = 0;
              }
           if (OrderType() == OP_SELL)          
              {
               Closed = OrderClose(OrderTicket() ,OrderLots(), Bid, UseSlippage, Red);  
               opensell = 0;         
              }              
          }
       }
    }


//BuyOrder 
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,0,"time trader buy order ",MagicNumber,0,Blue);
}
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0,"time trader sell order ",MagicNumber,0,Green);
} 

//----
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);
}
Ist jetzt nicht gerade elegant gelöst, funktioniert aber .
MinLot solltest du beim Broker erfragen (MODE_MINLOT), könnte sonst vieleicht nicht passen!

Gruß
naranjoe

Hallo Naranjoe,

auch Dir vielen Dank für Deine hilfe. Ich hatte bereits daran gedacht das ganze durch aufzähung zu lösen, aber mal ne Frage...ich werde aus der Dokumentation inm MQL Forum nicht ganz schlau...woher weiß ich was ich in die Orderselect alles reinpacken kann?
Gibt es eine Übersicht auf Deutsch zu diesem Thema...obwohl ich denke vom Verständnis tut sich in beiden Sprachen nicht sonderlich viel...
Immer wen ihc denke ich habe etwas geschafft tut sich was neues auf und ich habe nicht das Gefühl weiter zu kommen. Ich hatte mir vor einiger zeit das Buch "Expert Advisor Programming" geholt. Ein wenig komme ich damit zu recht, aber allein für die ersten beiden Kapitel...vll so 30 Seiten...habe ich schon 2 Monate gebraucht um vll mal wirklich ein wenig hinter die Thematik zu kommen und zu verstehen wie sich so ein Aufbau gliedern soll/muss...

VG und Danke

Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn...