Группа "Обмен опытом .и обсуждение индикаторов"

Рейтинг 16



Помощь в совмещении функций

Здравствуйте дорогие друзья!
Пытаюсь сам разобраться в коде, но наткнулся на одну ошибку (точнее несколько).
Пытаюсь совместить советник на РСИ (открытие ордеров за зонами перекупленности\перепроданности)
и обычного гридера ордеров с шагом выставления.
Кому интересно помочь, буду рад обсуждению и помощи в разборе кода.
Так как тут много кто разбирается в коде.
Вот сам код:
//+------------------------------------------------------------------+
//|                                                   Global robbery |
//|                                      Copyright 2019, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
/*
*/
//+------------------------------------------------------------------+
//|                                                      Rsi cracken |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "MaksGruv 2018-2019"
#property link      "https://vk.com/cripto_invest_project"
#property version   "3.10"
#property strict

extern double    Lot        = 0.01;   // Лот
extern int       Takeprofit  = 30;     // Тейкпрофит 
extern int       Step        = 40;     // Шаг между ордерами
extern int       Slippage    = 3;      // Проскальзывание
extern int       Magic       = 9999;   // Магический номер
extern int       period_RSI  = 14;     // Период РСИ для переменной
extern int       buy_level   = 30;     // Уровень  
extern int       sell_level  = 70;     // Уровень 
extern double    KStep        = 2;        // увеличение шага
extern string    comment     = "MaksGruv";

int ticket, otype, shift;
double rsi, TP, slip;
//........................................................................
//                                                                        |
//........................................................................
int init()
{
   
   if (Digits == 3  ||  Digits == 5)         // 5-ти Знак для брокера
   {
       Takeprofit *= 10;
       Step       *= 10;    
   }
   return(0);
}

//........................................................................
//                                                                        |
//........................................................................
int deint()
{


    return(0);
}
//........................................................................
//                                                                        |
//........................................................................
void OnTick()
{  for (int i=0; i<OrdersTotal(); i++)
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())return;
   double RSI0  = iRSI(NULL,0,period_RSI,PRICE_OPEN,0);
   double RSI1  = iRSI(NULL,0,period_RSI,PRICE_OPEN,1);

   if (RSI0 > buy_level && RSI1 < buy_level)
   {
      if (Takeprofit!=0) TP  = NormalizeDouble(Ask + Takeprofit*Point,Digits);
         
      if (OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Slippage,0,TP,NULL,Magic)==-1) Print(GetLastError());
   }
   if (RSI0 < sell_level && RSI1 > sell_level)
   {
      if (Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit*Point,Digits);
                  
      if (OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,0,TP,NULL,Magic)==-1) Print(GetLastError());
   }


  return;  
}
//...........................................................................................................................................


//...........................................................................................................................................
//                                                                        |
//...........................................................................................................................................
int CountTrades()                                                            //количество открытых ордеров
{
     int count = 0;                                                          //количество ордеров в рынке

     for (int i=OrdersTotal()-1; i>=0; i--)                                  //проверка ордеров   
     {
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))                     // функция выбирает ордер и параметры
         {
             if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)   //проверка ордера к отношение к ордеру и магику
             {
                 if (OrderType() == OP_BUY || OrderType() == OP_SELL)        //проверка рыночных ордеров
                 count++;
             }
         }

     }

    return(count);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Шаг для гридера                                                  |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  • +7
  • Просмотров: 1391
  • 15 января 2019, 14:09
  • maksGruv
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Обмен опытом .и обсуждение индикаторов", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Торговые уровни или всё же индикаторы?
Следующая запись в группе  
Помогите написать блок
22 ноября 2018
18 января 2019

Комментарии (0)


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари