prośba o zmodyfikowanie EA

O jezykach programowania w platformach i nie tylko.
miloszcichocki
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 18 sty 2013, 13:41

prośba o zmodyfikowanie EA

Nieprzeczytany post autor: miloszcichocki »

Witam,

posługuje się takim o to EA, które stawia zlecenia oczekujące na H/L dziennej świeczki, brakuje mi dwóch rzeczy, aby działało wszystko po mojej myśli :)

czy miałby ktoś chwilę czasu i mógł dodać BE, z możliwością ustawienia po ilu punktach nastąpi przesunięcie w miejsce BE+1.

druga sprawa to zmiana czasu ustawienia zleceń oczekujących z północy czasu brokera, u mnie jest GMT+2, na czas 8 rano w Polsce, czyli 00:00 platfromy + 6h

będę bardzo wdzięczny za pomoc.

Kod: Zaznacz cały

#property copyright "Copyright © 2009, primajaya"
#property link      ""

//---- input parameters
extern int       TP           = 20;
extern int       SL           = 15;
extern int       RangePoint   = 10;
extern double    LotSize      = 1;
extern int       MagicNumber  = 123456789;
extern bool      DelOpposite = false;



#define slip 2
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*point();
   double tik = iVolume(NULL,0,0);
   int exp = TimeCurrent() + (Period()*59);
   double buyPrice, sellPrice;
   
   if(High[1]-Ask < stoplevel) buyPrice = Ask + RangePoint*point();
   else buyPrice = High[1];
   
   if(Bid-Low[1] < stoplevel) sellPrice = Bid - RangePoint*point();
   else sellPrice = Low[1];
   
   
   if(OrdersTotal() == 0)
   {
      if(tik <= 2)
      {
         openOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL*point(), buyPrice+TP*point(),"_Buy_",MagicNumber,exp,Navy);
         openOrder(Symbol(), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL*point(), sellPrice-TP*point(),"_Sell_",MagicNumber,exp,Crimson);   
      }   
   }
   
   if(OrdersTotal () == 2)
   {
      for (int i=0;i<OrdersTotal();i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber)
         {
            if(DelOpposite) delPending(OP_SELLSTOP,MagicNumber);
         }
         
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)
         {
            if(DelOpposite) delPending(OP_BUYSTOP,MagicNumber);
         }
      }
   
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

void openOrder(string simbol, int trade, double lotsize, double price, double sl, double tp,string pesan, int magic, int exp, color warna) 
{                     
  int tiket=OrderSend(simbol,trade,lotsize,price,slip,sl,tp,pesan,magic,exp,warna);                              
      if(tiket>0)
      {  
         if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) OrderPrint(); 
      }
         else Print("Cannot send order because of : ",GetLastError());        
}

void delPending(int trade, int MagicNumber)
{  
    for(int i=0;i<OrdersTotal();i++)
    {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderType()==trade && OrderMagicNumber()==MagicNumber)
       OrderDelete(OrderTicket(),CLR_NONE);
    }   
}

double point()
{
   double p;
   if(Digits==5 || Digits==3) p = Point*10;
   else p = Point;
   
   return(p);
}

Awatar użytkownika
investsoft.pl
Stały bywalec
Stały bywalec
Posty: 35
Rejestracja: 30 sie 2013, 11:38

Re: prośba o zmodyfikowanie EA

Nieprzeczytany post autor: investsoft.pl »

Dodałem do skryptu kilka parametrów:

BE - na ile pipsów musi się oddalić bieżąca cena od ceny otwarica, żeby s/l został przesunięty do BE+1
ExpDaysToAdd, ExpHoursToAdd, ExpMinutesToAdd - po ilu dniach, godzinach i minutach ma wygasać zlecenie oczekujące

Kod: Zaznacz cały

#property copyright "Copyright © 2009, primajaya"
#property link      "http://www.investsoft.pl"

//---- input parameters
extern int       TP           = 20;
extern int       SL           = 15;
extern int       RangePoint   = 10;
extern double    LotSize      = 1;
extern int       MagicNumber  = 123456789;
extern bool      DelOpposite  = false;
extern int       BE           = 10;
extern int       ExpDaysToAdd    = 1;
extern int       ExpHoursToAdd   = 8;
extern int       ExpMinutesToAdd = 0;


#define slip 2
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*point();
   double tik = iVolume(NULL,0,0);
   int timeToAdd = (ExpDaysToAdd * 86400) + ( ExpHoursToAdd * 3600 ) + ( ExpMinutesToAdd * 60 );
   datetime tmCurrent = CurTime();
   datetime exp = tmCurrent + timeToAdd;
    
   double buyPrice, sellPrice;
   
   if(High[1]-Ask < stoplevel) buyPrice = Ask + RangePoint*point();
   else buyPrice = High[1];
   
   if(Bid-Low[1] < stoplevel) sellPrice = Bid - RangePoint*point();
   else sellPrice = Low[1];
     
   if(OrdersTotal() == 0)
   {
      if(tik <= 2)
      {
         openOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL*point(), buyPrice+TP*point(),"_Buy_",MagicNumber,exp,Navy);
         openOrder(Symbol(), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL*point(), sellPrice-TP*point(),"_Sell_",MagicNumber,exp,Crimson);   
      }   
   }
   
   if(OrdersTotal () > 0)
   {
      for (int i=0;i<OrdersTotal();i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber)
         {
            // set BE for LONG
            if (BE > 0 && OrderOpenPrice() > OrderStopLoss() && (Bid - OrderOpenPrice())/point() > BE) {
               // set BE
               OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + 1*point(), OrderTakeProfit(), OrderExpiration(), Yellow);
            }  
            if(DelOpposite && OrdersTotal()==2) delPending(OP_SELLSTOP,MagicNumber);            
         }
         
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber)
         {
            if(DelOpposite && OrdersTotal()==2) delPending(OP_BUYSTOP,MagicNumber);
            // set BE for SHORT
            if (BE > 0 && OrderOpenPrice() < OrderStopLoss() && (OrderOpenPrice() - Ask)/point() > BE) {
               // set BE
               OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - 1*point(), OrderTakeProfit(), OrderExpiration(), Orange);
            }
         }
      }
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

void openOrder(string simbol, int trade, double lotsize, double price, double sl, double tp,string pesan, int magic, datetime exp, color warna) 
{                     
  int tiket=OrderSend(simbol,trade,lotsize,price,slip,sl,tp,pesan,magic,exp,warna);                              
      if(tiket>0)
      {  
         if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) OrderPrint(); 
      }
         else Print("Cannot send order because of : ",GetLastError());        
}

void delPending(int trade, int MagicNumber)
{  
    for(int i=0;i<OrdersTotal();i++)
    {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderType()==trade && OrderMagicNumber()==MagicNumber)
       OrderDelete(OrderTicket(),CLR_NONE);
    }   
}

double point()
{
   double p;
   if(Digits==5 || Digits==3) p = Point*10;
   else p = Point;
   
   return(p);
}
//---------------------------------------------------+

miloszcichocki
Uczestnik
Uczestnik
Posty: 4
Rejestracja: 18 sty 2013, 13:41

Re: prośba o zmodyfikowanie EA

Nieprzeczytany post autor: miloszcichocki »

super, dziękuje bardzo za pomoc

ODPOWIEDZ