2016-11-29 2 views
0

Ich baue einen EA (Expert Advisory) für meinen Handel, ich frage mich, wie kann ich die Funktion einstellen, um die Bestellung 5 Minuten später auszuführen, wenn der 1. Auftrag ausgeführt wird.Wie führe ich bestimmte Funktionen alle 5 Minuten aus?

Das Problem in meinem aktuellen Code ist, sobald es die Anforderung erfüllen, wird es die gleiche Reihenfolge zu platzieren, bis ich Geld ausging, aber meine Idee ist, sobald es die Anforderung erfüllen, wird es die Bestellung einmal und nach 5 Minuten, wird es wieder überprüfen, ob die Bedingung immer noch die Anforderung erfüllen, wenn ja, wird es die Bestellung wieder aufgeben, wenn nicht wird es für jede Minute dann überprüfen, bis die Anforderung erfüllt ist.

kurz gesagt, sobald die 1. Bestellung ausgeführt wird, wird es keine Bestellung innerhalb von 5 Minuten aufgeben und wird den Zustand jede Minute nach den 5. Minuten testen.

Hier ist der Code.

extern int MagicNumber=10001; 
extern double Lots =0.1; 
extern double StopLoss=0; 
extern double TakeProfit=0; 
extern int TrailingStop=0; 
extern int Slippage=3; 
//+------------------------------------------------------------------+ 
// expert start function 
//+------------------------------------------------------------------+ 
int start() 
{ 
    double MyPoint=Point; 
    if(Digits==3 || Digits==5) MyPoint=Point*10; 

    double TheStopLoss=0; 
    double TheTakeProfit=0; 
    if(TotalOrdersCount()>=0) 
    { 
    int result=0; 
    if((iRSI(NULL,PERIOD_M1,5,PRICE_CLOSE,1)<21)) // Here is your open buy rule 
    { 
     result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue); 
     if(result>0) 
     { 
     TheStopLoss=0; 
     TheTakeProfit=0; 
     if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint; 
     if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint; 
     OrderSelect(result,SELECT_BY_TICKET); 
     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); 
     } 
     return(0); 
    } 
    if((iRSI(NULL,PERIOD_M1,5,PRICE_CLOSE,1)>79)) // Here is your open Sell rule 
    { 
     result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red); 
     if(result>0) 
     { 
     TheStopLoss=0; 
     TheTakeProfit=0; 
     if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint; 
     if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint; 
     OrderSelect(result,SELECT_BY_TICKET); 
     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green); 
     } 
     return(0); 
    } 
    } 

    for(int cnt=0;cnt<OrdersTotal();cnt++) 
    { 
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); 
     if(OrderType()<=OP_SELL && 
     OrderSymbol()==Symbol() && 
     OrderMagicNumber()==MagicNumber 
     ) 
     { 
     if(OrderType()==OP_BUY) 
      { 
       if((iRSI(NULL,PERIOD_M1,5,PRICE_CLOSE,1)>70)) //here is your close buy rule 
       { 
        OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); 
       } 
      if(TrailingStop>0) 
       {     
       if(Bid-OrderOpenPrice()>MyPoint*TrailingStop) 
       { 
        if(OrderStopLoss()<Bid-MyPoint*TrailingStop) 
        { 
        OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green); 
        return(0); 
        } 
       } 
       } 
      } 
     else 
      { 
       if((iRSI(NULL,PERIOD_M1,5,PRICE_CLOSE,1)<30)) // here is your close sell rule 
       { 
        OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red); 
       } 
      if(TrailingStop>0) 
       {     
       if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop)) 
       { 
        if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0)) 
        { 
        OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red); 
        return(0); 
        } 
       } 
       } 
      } 
     } 
    } 
    return(0); 
} 

int TotalOrdersCount() 
{ 
    int result=0; 
    for(int i=0;i<OrdersTotal();i++) 
    { 
    OrderSelect(i,SELECT_BY_POS ,MODE_TRADES); 
    if (OrderMagicNumber()==MagicNumber) result++; 

    } 
    return (result); 
} 
+0

hinzufügen Flag init auf true gesetzt, wenn Auftrag vergeben wird es auf false gesetzt. Nachdem Sie x mal überprüft haben, setzen Sie es erneut auf "true", um die Reihenfolge in der nächsten Iteration festzulegen. – Jules

+0

Hallo, können Sie genauer gesagt werden, wie kann ich das tun? Entschuldigung, dass ich wirklich neu bin auf Codierung. – DouglasQ

+0

Sie können System.Threading.Timer wie folgt verwenden: Timer tr = neuer Timer (val => { // Code, der alle 5 Sekunden ausgeführt wird }, 0,0, 5000); –

Antwort

0

Sie können wie folgt in jedem Intervall Aufruf der Funktion tun:

static void Main(string[] args) 
{ 
    int num = 0; 
    TimerCallback tm = new TimerCallback(Count); 
    Timer timer = new Timer(tm, num, 0, 2000);//where the 4-th number is interval in milliseconds 

    Console.ReadLine(); 
} 
public static void Count(object obj) 
{ 
    int x = (int)obj; 
    for (int i = 1; i < 9; i++, x++) 
    { 
     Console.WriteLine("{0}", x*i);  
    } 
} 
0

Sie können Timer hinzufügen, in der Ihr Intervall 5 Münzstätten ist, bedeutet nach alle fünf mintues Ereignis tick wird so feuern Sie können Ihre Funktion in diesem Fall

Timer objtimer; 
static void Main() 
{ 
    objtimer = new Timer(); 
    objtimer.Interval =50000; 
    objtimer.Tick += objtimer_Tick; 
} 
void objtimer_Tick(object sender, EventArgs e) 
{ 
     // your function 
} 
0
... 
System.Windows.Forms.Timer t=new System.Windows.Forms.Timer(); 
t.Interval=300000; 
t.Enabled=true; 
t.Tick+= new EventHandler(t_Tick); 
... 
void t_Tick(object sender, EventArgs e) 
{ 
Console.WriteLine("5 MIN"); 
} 
... 
Verwandte Themen