0
Пока не получается сделать как надо. Как сделаю напишу.
avatar

AM2

  • 2 февраля 2015, 21:15
0
Совместил :) 




//+----------------------------------------------------------------------------+
//|  Сопровождение ордеров простым тралом                                      |
//+----------------------------------------------------------------------------+
void TrailingOrders() 
  {
   double di,pa,pb,pp,st,tk;
   bool mod;

   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         pp=MarketInfo(OrderSymbol(),MODE_POINT);
         if(OrderType()==OP_BUYSTOP) 
           {
            pa=MarketInfo(OrderSymbol(),MODE_ASK);
            if(OrderOpenPrice()-pa>(Delta+Prohod+TrailingStep-1)*pp) 
              {
               di=OrderOpenPrice()-pa-(Delta+Prohod)*pp;
               if(OrderStopLoss()  >0) st=OrderStopLoss()  -di; else st=0;
               if(OrderTakeProfit()>0) tk=OrderTakeProfit()-di; else tk=0;
               mod=OrderModify(OrderTicket(),pa+(Delta+Prohod)*pp,st,tk,0,Blue);
              }
           }
         if(OrderType()==OP_SELLSTOP) 
           {
            pb=MarketInfo(OrderSymbol(),MODE_BID);
            if(pb-OrderOpenPrice()>(Delta+Prohod+TrailingStep-1)*pp) 
              {
               di=pb-OrderOpenPrice()-(Delta+Prohod)*pp;
               if(OrderStopLoss()  >0) st=OrderStopLoss()  +di; else st=0;
               if(OrderTakeProfit()>0) tk=OrderTakeProfit()+di; else tk=0;
               mod=OrderModify(OrderTicket(),pb-(Delta+Prohod)*pp,st,tk,0,Red);
              }
           }
         }
       }
     }
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 1 февраля 2015, 21:58
0
Сейчас вот так сделаю:
Относительно трала — скажем выставился sellstop, цена пошла выше на 5 п., ему бы
также подтянуться на эти 5 п.
avatar

AM2

  • 1 февраля 2015, 21:12
0
Поправил функцию, сейчас с тейком и тралом все в порядке: www.opentraders.ru/downloads/575/
avatar

AM2

  • 1 февраля 2015, 19:53
0
Вот на этой основе, постараюсь трал ордеров написать, а то самому придумывать пришлось :)  www.opentraders.ru/downloads/578/
avatar

AM2

  • 1 февраля 2015, 19:22
0
Я начал делать. но я по своему все перепишу завтра: www.opentraders.ru/downloads/576/

avatar

AM2

  • 1 февраля 2015, 00:19
0
Посмотрите вроде бегает за ценой: www.opentraders.ru/downloads/575/


avatar

AM2

  • 31 января 2015, 22:45
0
Я обычно все сморю и что в моих силах делаю.
avatar

AM2

  • 31 января 2015, 21:17
0
Посмотрю сейчас.
avatar

AM2

  • 31 января 2015, 18:53
0
С чужим кодом я как правило не работаю.
avatar

AM2

  • 31 января 2015, 18:52
0
Немного поправил, чуть чуть добавил и вопрос:

avatar

AM2

  • 31 января 2015, 18:12
+1
Я поправил сразу несколько моментов, но проверять завтра уже.


//+------------------------------------------------------------------+
//|                                                    UniScript.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property script_show_inputs

#define MAGIC  20150129

extern int    StopLoss    = 1900;//Стоплосс ордера
extern int    TakeProfit  = 350; //Тейкпрофит ордера 
extern int    MiliSec     = 300; //Количество миллисекунд, через которые выставляем следующий ордер
extern int    Slip        = 0;   //Реквот
extern int    Distance    = 250; //Расстояние от цены для установки ордера
extern int    Step        = 250; //Шаг установки ордеров
extern int    Count       = 10;  //Количество устанавливаемых ордеров
extern int    StopLimit   = 0;   //0 - Только стоповые ордера, 1 - только лимитные, 2 - и стоп и лимит
extern int    Expiration  = 14;  //Время истечения ордера
extern double Lots        = 0.1; //Лот
extern double KLot        = 1;   //Коэффициент умножения лота
extern double PLot        = 0.1; //Увеличение лота

extern bool   Buy         = true;//Покупки включены
extern bool   Sell        = true;//Пподажи включены

double blot=Lots;
double slot=Lots;
double price,tp;
int i,res;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime expiration = TimeCurrent()+3600*Expiration;
//--------------------------------------------------------------------          
   for(i=1;i<=Count;i++)
    {
     { 
      price=Ask+(Distance*Point+i*Step*Point);           
      if(StopLimit==0)
       {
        tp=Ask+(Distance*Point+Count*Step*Point)+TakeProfit*Point;
        if(Buy==true) res=OrderSend(Symbol(),OP_BUYSTOP,blot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Blue);
       } 
      if(StopLimit==1)
       {
        tp=Bid+(Distance*Point)-TakeProfit*Point;
        if(Sell==true) res=OrderSend(Symbol(),OP_SELLLIMIT,blot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Red);
       }
      blot=blot*KLot+PLot;      
      Sleep(MiliSec);
     }
   }
//+------------------------------------------------------------------+         
   for(i=1;i<=Count;i++)
    {   
     {
      price=Bid-(Distance*Point+i*Step*Point);
      tp=Bid-(Distance*Point+Count*Step*Point)-TakeProfit*Point;                
      if(StopLimit==0)
       {
        tp=Bid-(Distance*Point+Count*Step*Point)-TakeProfit*Point;
        if(Sell==true) res=OrderSend(Symbol(),OP_SELLSTOP,slot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Red);
       }
      if(StopLimit==1)
       {
        tp=Bid-(Distance*Point)+TakeProfit*Point;
        if(Buy==true) res=OrderSend(Symbol(),OP_BUYLIMIT,slot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Blue);
       }
      slot=slot*KLot+PLot;      
      Sleep(MiliSec);
     }
    }   
  }
//+------------------------------------------------------------------+
double fND(double d, int n=-1) 
  {  
   if (n<0) return(NormalizeDouble(d, Digits)); 
   return(NormalizeDouble(d, n)); 
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 29 января 2015, 23:31
0
Посмотрите как сейчас будет?


//+------------------------------------------------------------------+
//|                                                        Beton.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

#define MAGICMA  20150127
//--- Inputs
extern double StopLoss     = 500;
extern double TakeProfit   = 500;
extern double Slip         = 100;
extern double Lots         = 0.1;
extern double KLot         = 2;
extern double MaxLot       = 5;
//----
extern int    BuyM1        = 0;// signal = 1
extern int    BuyM5        = 0;
extern int    BuyM15       = 0;
extern int    BuyM30       = 0;
extern int    BuyH1        = 0;
extern int    BuyH4        = 0;
extern int    BuyD1        = 0;
extern int    BuyW1        = 0;
extern int    BuyMN1       = 0;
//----
extern int    SellM1       = 1;// signal = 1
extern int    SellM5       = 1;
extern int    SellM15      = 1;
extern int    SellM30      = 1;
extern int    SellH1       = 0;
extern int    SellH4       = 0;
extern int    SellD1       = 0;
extern int    SellW1       = 0;
extern int    SellMN1      = 0;
//----
extern int    K            = 30;
extern double Kstop        = 0.5;
extern int    Kperiod      = 150;
extern int    PerADX       = 7;
extern int    CountBars    = 350;
//----
int bm1,rm1,bm5,rm5,bm15,rm15,bm30,rm30,bh1,rh1,bh4,rh4,bd1,rd1,bw1,rw1,bmn1,rmn1;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int res,p;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;                        
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i, SELECT_BY_POS))
      {  
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGICMA) continue;       
       if (OrderType()==OP_BUY) p++;
       if (OrderType()==OP_SELL) p++;                  
      }   
    }
//--- sell conditions
   if(rm1==SellM1 && rm5==SellM5 && rm15==SellM15 && rm30==SellM30 && rh1==SellH1 && rh4==SellH4 && rd1==SellD1 && rw1==SellW1 && rmn1==SellMN1 && p<1)
     {
      res=OrderSend(Symbol(),OP_SELL,Lot(),Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
     }
//--- buy conditions
   if(bm1==BuyM1 && bm5==BuyM5 && bm15==BuyM15 && bm30==BuyM30 && bh1==BuyH1 && bh4==BuyH4 && bd1==BuyD1 && bw1==BuyW1 && bmn1==BuyMN1 && p<1)
     {
      res=OrderSend(Symbol(),OP_BUY,Lot(),Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
     }    
//---
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot;   
   if(OrdersHistoryTotal()==0)
    {
     lot=Lots;
    }             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)                                       
      if(OrderProfit()>0)                     
       {
        lot=Lots;  
       }
      if(OrderProfit()<=0)
        {
         lot=OrderLots()*KLot;  
        }
     }
    if(lot>MaxLot)lot=MaxLot;            
   return(lot);
  }   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Indicators 
   double AlBlue=iCustom(Symbol(),0,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   double AlRed=iCustom(Symbol(),0,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);

//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(AlBlue>AlRed)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(AlRed>AlBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double AlBlueM1=iCustom(Symbol(),PERIOD_M1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedM1=iCustom(Symbol(),PERIOD_M1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueM5=iCustom(Symbol(),PERIOD_M5,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedM5=iCustom(Symbol(),PERIOD_M5,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueM15=iCustom(Symbol(),PERIOD_M15,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedM15=iCustom(Symbol(),PERIOD_M15,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueM30=iCustom(Symbol(),PERIOD_M30,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedM30=iCustom(Symbol(),PERIOD_M30,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
              
   double AlBlueH1=iCustom(Symbol(),PERIOD_H1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedH1=iCustom(Symbol(),PERIOD_H1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueH4=iCustom(Symbol(),PERIOD_H4,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedH4=iCustom(Symbol(),PERIOD_H4,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueD1=iCustom(Symbol(),PERIOD_D1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedD1=iCustom(Symbol(),PERIOD_D1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueW1=iCustom(Symbol(),PERIOD_W1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedW1=iCustom(Symbol(),PERIOD_W1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);
   
   double AlBlueMN1=iCustom(Symbol(),PERIOD_MN1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,0,1);
   double AlRedMN1=iCustom(Symbol(),PERIOD_MN1,"AltrTrend",K,Kstop,Kperiod,PerADX,CountBars,1,1);            
   
   if(AlBlueM1>0) {bm1=1;rm1=0;}
   if(AlRedM1>0) {rm1=1;bm1=0;} 
   
   if(AlBlueM5>0) {bm5=1;rm5=0;}
   if(AlRedM5>0) {rm5=1;bm5=0;} 
   
   if(AlBlueM15>0) {bm15=1;rm15=0;}
   if(AlRedM15>0) {rm15=1;bm15=0;} 
   
   if(AlBlueM30>0) {bm30=1;rm30=0;}
   if(AlRedM30>0) {rm30=1;bm30=0;} 
               
   if(AlBlueH1>0) {bh1=1;rh1=0;}
   if(AlRedH1>0) {rh1=1;bh1=0;} 
   
   if(AlBlueH4>0) {bh4=1;rh4=0;}
   if(AlRedH4>0) {rh4=1;bh4=0;} 
   
   if(AlBlueD1>0) {bd1=1;rd1=0;}
   if(AlRedD1>0) {rd1=1;bd1=0;} 
   
   if(AlBlueW1>0) {bw1=1;rw1=0;}
   if(AlRedW1>0) {rw1=1;bw1=0;} 
   
   if(AlBlueMN1>0) {bmn1=1;rmn1=0;}
   if(AlRedMN1>0) {rmn1=1;bmn1=0;}             
   
   Comment(
   "\n BlueM1 ",bm1,
   "\n RedM1 ",rm1, 
   "\n BlueM5 ",bm5,
   "\n RedM5 ",rm5, 
   "\n BlueM15 ",bm15,
   "\n RedM15 ",rm15, 
   "\n BlueM30 ",bm30,
   "\n RedM30 ",rm30,            
   "\n BlueH1 ",bh1,
   "\n RedH1 ",rh1,
   "\n BlueH4 ",bh4,
   "\n RedH4 ",rh4, 
   "\n BlueD1 ",bd1,
   "\n RedD1 ",rd1, 
   "\n BlueW1 ",bw1,
   "\n RedW1 ",rw1, 
   "\n BlueMN1 ",bmn1,
   "\n RedMN1 ",rmn1); 
      
   if(OrdersTotal()<1) CheckForOpen();
   //else CheckForClose();
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 29 января 2015, 23:16
+1
Все! Выставил как положено теперь! *lalala* 
www.opentraders.ru/downloads/574/
Пошел на учебу собираться. С Дмитрием Владимировичем
неподалеку учимся

avatar

AM2

  • 29 января 2015, 10:54
0
Начал делать, но чтобы выставить все ордера с тейком на одном уровне, вот в этой формуле что то не вяжется:


tp=Ask+Distance*Point+Step*(Count-i)*Point+TakeProfit*Point; 



//+------------------------------------------------------------------+
//|                                                    UniScript.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property script_show_inputs

#define MAGIC  20150129

extern int    StopLoss    = 1900;//Стоплосс ордера
extern int    TakeProfit  = 350; //Тейкпрофит ордера 
extern int    MiliSec     = 300; //Количество миллисекунд, через которые выставляем следующий ордер
extern int    Slip        = 0;   //Реквот
extern int    Distance    = 250; //Расстояние от цены для установки ордера
extern int    Step        = 250; //Шаг установки ордеров
extern int    Count       = 10;  //Количество устанавливаемых ордеров
extern int    StopLimit   = 0;   //0 - Только стоповые ордера, 1 - только лимитные, 2 - и стоп и лимит
extern int    Expiration  = 14;  //Время истечения ордера
extern double Lots        = 0.1; //Лот
extern double KLot        = 1;   //Коэффициент умножения лота
extern double PLot        = 0.1; //Увеличение лота

double blot=Lots;
double slot=Lots;
double price,tp;
int i,res;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime expiration = TimeCurrent()+3600*Expiration;
//--------------------------------------------------------------------          
   for(i=1;i<=Count;i++)
    {
     { 
      price=Ask+(Distance*Point+i*Step*Point);
      tp=Ask+Distance*Point+Step*(Count-i+1)*Point+TakeProfit*Point;           
      if(StopLimit==0 || StopLimit==2)res=OrderSend(Symbol(),OP_BUYSTOP,blot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Blue);
      if(StopLimit==1 || StopLimit==2)res=OrderSend(Symbol(),OP_SELLLIMIT,blot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Red);
      blot=blot*KLot+PLot;      
      Sleep(MiliSec);
     }
   }
//+------------------------------------------------------------------+         
   for(i=1;i<=Count;i++)
    {   
     {
      price=Bid-(Distance*Point+i*Step*Point);
      tp=Bid-(Distance*Point+Step*(Count-i+1)*Point)-TakeProfit*Point;                
      if(StopLimit==0 || StopLimit==2) res=OrderSend(Symbol(),OP_SELLSTOP,slot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Red);
      if(StopLimit==1 || StopLimit==2)res=OrderSend(Symbol(),OP_BUYLIMIT,slot,fND(price),Slip,0,fND(tp),"",MAGIC,expiration,Blue);
      slot=slot*KLot+PLot;      
      Sleep(MiliSec);
     }
    }   
  }
//+------------------------------------------------------------------+
double fND(double d, int n=-1) 
  {  
   if (n<0) return(NormalizeDouble(d, Digits)); 
   return(NormalizeDouble(d, n)); 
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 29 января 2015, 10:09
0
не работает проще говоря :)  если кому то интересно можно доделать и за указанное количество дней считать
avatar

AM2

  • 29 января 2015, 00:45
0
Завтра утром займусь.
avatar

AM2

  • 28 января 2015, 23:20
0
Мартина добавил: www.opentraders.ru/downloads/572/

avatar

AM2

  • 28 января 2015, 23:12
0
я когда по фунту оптил, там нормально было.
avatar

AM2

  • 28 января 2015, 22:45
0
я сначала на несколько дней хотел расчитывать волатильность. а потом человека и так результат устроил за один день предыдущий. тем более вол не отлажена до конца еще.
avatar

AM2

  • 28 января 2015, 22:43