Группа "Стол заказов MQL"

Рейтинг 2087



РЕКОМЕНДУЮ




Лучшее от div15



может все просто Комментариев 7
2012-03-22 17:38:38Рейтинг 0

советник по ренко

ЗДРАВСТВУЙТЕ УВАЖАЕМЫЙ AM2.
МОЖНО ЛИ НАПИСАТЬ СОВЕТНИК ПО СЛЕДУЮЩЕМ ПАРАМЕТРАМ
1 СОВЕТНИК БУДЕТ РАБОТАТЬ НА РЕНКО ГРАФИКАХ
2 СОВЕТНИК РАБОТАЕТ ПО Close[1]>Open[1] && Close[2]<Open[2] НА ПОКУПКУ И ПРОДАЖУ И Close[1]<Open[1] && Close[2]>Open[2] НА ПОКУПКУ И ПРОДАЖУ
3 ЕСЛИ ОДИН ОРДЕР ЗАКРЫЛСЯ ПО КЛОСЕ РЕВЕРС С УБЫТКОМ (ЗАКРЫВАТЬ ОРДЕРА ПО ВСТРЕЧНОМУ СИГНАЛУ) ТО НА СЛЕДУЮЩЕМ БАРЕ ОПЯТЬ ОТКРЫВАЕМ 2 ОРДЕРА НО ТОТ ОРДЕР КОТОРЫЙ ЗАКРЫЛСЯ С УБЫТКОМ УМНОЖАЕМ НА ЛОТ ЭКСПОНЕНТ.
4 СОВЕТНИК ДОЛЖЕН ЗАКРЫВАТЬ ОРДЕРА ПО ВСТРЕЧНОМУ СИГНАЛУ
5 СОВЕТНИК МАРТИНГЕЙЛ
6 СТОПЛОСС 200 ПУНКТОВ 5 ТИ ЗНАК
7 ТЕЙК ПРОФИТ ПО УМОЛЧАНИЮ
ПРИМЕРНЫЙ ВАРИАНТ
Я ТАК ПОЛОГАЮ НАДО ПРИСВОИТЬ ОРДЕРАМ ТИКЕТ
//+------------------------------------------------------------------+
//|                                                  10 ПУНКТОВ .mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict

extern string  общие_параметры       = ""; 
extern int     stoploss             = 300,    //стоплосс
               takeprofit           = 100,    //тейкпрофит
               MaxOrders            = 10;     //максимальное кол-во ордеров одновременно на счете
extern double  Lots                 = 0.1;   //объем ордера     
extern double  LotExponent          = 2;      //множитель для увеличения следующего лота в случае если сделка будет убыточной
extern int     Slip                 = 0;      //проскальзывание цены
//extern int     TrailingStop         = 0;      //трейлингстоп, если 0, то нет трейлинга
//extern int     NoLoss               = 0;      //перевод в безубыток, если 0, то нет перевода в безубыток
extern bool    CloseRevers          = true;   //закрывать ордера при встречном сигнале
extern int     Magic                = 56789;
//+--------------ФИЛЬТР_ВРЕМЯ----------------------------------------------------+
extern string  ФИЛЬТР_ВРЕМЯ="";
extern int     TimeStart           = 0 ,   //начало работы
               TimeEnd             = 24;   // конец работы
//+------------------------------------------------------------------+
//|ПЕРЕМЕННЫЕ ДЛЯ  ЛОТ ЭКСПОНЕНТ                                     |
//+------------------------------------------------------------------+
 double SL,// SL выбранного ордера 
        TP;  // TP выбранного ордера
int TimeBar,STOPLEVEL;
int time = 0;
bool Trade;// ПЕРЕМЕННАЯ ДЛЯ ВРЕМЕНИ
//--------------------------------------------------------------------
//--------------ФУНКЦИЯ РАСЧЕТА ИНДИКАТОРОВ---------------------------
//--------------------------------------------------------------------
int start()
{
   int TekHour = Hour();
   if ( TimeStart < TimeEnd && TekHour >= TimeStart && TekHour < TimeEnd ) Trade=true; 
   else 
   {
      if ( TimeStart > TimeEnd && (TekHour >= TimeStart || TekHour < TimeEnd)) //торговля ночью
      {
         Trade=true;
      }
      else 
      {
         Trade=false;Comment("Торговля запрещена по времени");
      }
   }
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
  // if (TrailingStop>=STOPLEVEL) TrailingStop();
  // if (NoLoss>=STOPLEVEL) NoLoss();
   if (TimeBar==Time[0]) return(0);
   //  значение индикатора
//--------------------------------------------------------------------
//--------------ФУНКЦИЯ ТОРГОВЛИ--------------------------------------
//-------------------------------------------------------------------- 
//----------------УСЛОВИЕ НА ПОКУПКУ----------------------------------------------------
   if ( Close[1]>Open[1] && Close[2]<Open[2] )// &&>Pip1 Pip11&&
   {
      if (CloseRevers) CLOSEORDER(OP_SELL);
      if (CloseRevers) CLOSEORDER(OP_BUY);
      if (MaxOrders>OrdersTotal() && Trade)       
      {
         if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0)   SL  = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
         if (OrderSend(Symbol(),OP_BUY, Lots(),NormalizeDouble(Ask,Digits),Slip,SL,TP,"10 ПУНКТОВ СКАЛЬПЕР",Magic,0,Blue)!=-1) TimeBar=Time[0]; 
         //----------------УСЛОВИЕ НА ПРОДАЖУ----------------------------------------------------
        if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0)   SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
         if (OrderSend(Symbol(),OP_SELL,Lots(),NormalizeDouble(Bid,Digits),Slip,SL,TP,"10 ПУНКТОВ СКАЛЬПЕР",Magic,0,Red)!=-1) TimeBar=Time[0];  
      }
   }
//----------------УСЛОВИЕ НА ПРОДАЖУ----------------------------------------------------
   if ( Close[1]<Open[1] && Close[2]>Open[2] )//&& <Pip2 Pip12&&
   {
      if (CloseRevers) CLOSEORDER(OP_BUY);
      if (CloseRevers) CLOSEORDER(OP_SELL);
      if (MaxOrders>OrdersTotal() && Trade) 
      {
         if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0)   SL = NormalizeDouble(Ask + stoploss*Point,Digits); else SL = 0;
         if (OrderSend(Symbol(),OP_SELL,Lots(),NormalizeDouble(Bid,Digits),Slip,SL,TP,"10 ПУНКТОВ СКАЛЬПЕР",Magic,0,Red)!=-1) TimeBar=Time[0]; 
         //----------------УСЛОВИЕ НА ПОКУПКУ----------------------------------------------------
         if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP = 0;
         if (stoploss!=0)   SL  = NormalizeDouble(Bid - stoploss*Point,Digits); else SL = 0;
         if (OrderSend(Symbol(),OP_BUY, Lots(),NormalizeDouble(Ask,Digits),Slip,SL,TP,"10 ПУНКТОВ СКАЛЬПЕР",Magic,0,Blue)!=-1) TimeBar=Time[0];  
      }
   }
return(0);
}
//+------------------------------------------------------------------------------------
//+---------------ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРОВ---------------------------------------------
//+------------------------------------------------------------------------------------
void CLOSEORDER(int ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
            if (OrderType()==OP_BUY && ord==OP_BUY)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
            if (OrderType()==OP_SELL && ord==OP_SELL)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
         }
      }   
   }
}
//--------------------------------------------------------------------
//------------ФУНКЦИЯ МАРТИНГЕЙЛА-------------------------------------
//--------------------------------------------------------------------
double Lots()
 {
   double lot = Lots ;
   int total = OrdersHistoryTotal();
   for (int i = 0; i < total; i++)
    {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
       {
         if (OrderProfit() > 0)
          {
            lot = Lots ;
          }         
          else
           {
            lot = lot * LotExponent ;
           }
       }
    }
   return(lot);
}
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------
/*
void TrailingStop()
{
   int tip,Ticket;
   double StLo,OSL,OOP;
   for (int i=0; i<OrdersTotal(); i++) 
   {  if (OrderSelect(i, SELECT_BY_POS))
      {  tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            if (tip==OP_BUY)             
            {
               StLo = NormalizeDouble(Bid-TrailingStop*Point,Digits);
               if (StLo > OSL && StLo > OOP)
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("TrailingStop Error ",GetLastError()," buy SL ",OSL,"->",StLo);
               }
            }                                         
            if (tip==OP_SELL)        
            {
               StLo = NormalizeDouble(Ask+TrailingStop*Point,Digits);
               if (StLo > OOP || StLo==0) continue;
               if (StLo < OSL || OSL==0 )
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("TrailingStop Error ",GetLastError()," sell SL ",OSL,"->",StLo);
               }
            } 
         }
      }
   }
}
//--------------------------------------------------------------------
//-----------ФУНКЦИЯ БЕЗУБЫТКА----------------------------------------
//--------------------------------------------------------------------
void NoLoss()
{
   int tip,Ticket;
   double StLo,OSL,OOP;
   for (int i=0; i<OrdersTotal(); i++) 
   {  if (OrderSelect(i, SELECT_BY_POS))
      {  tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            Ticket = OrderTicket();
            if (tip==OP_BUY)             
            {
               if (OSL>OOP) continue;
               StLo = NormalizeDouble(OOP+Point,Digits);
               if (NormalizeDouble((Bid-OOP)/Point,0)>=NoLoss)
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("NoLoss Error ",GetLastError()," buy SL ",OSL,"->",StLo);
               }
            }                                         
            if (tip==OP_SELL)        
            {
               if (OSL<OOP) continue;
               StLo = NormalizeDouble(OOP-Point,Digits);
               if (NormalizeDouble((OOP-Ask)/Point,0)>=NoLoss)
               {  if (!OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White))
                     Print("NoLoss Error ",GetLastError()," sell SL ",OSL,"->",StLo);
               }
            } 
         }
      }
   }
}

//+------------------------------------------------------------------------------------+
//+---------------КОНЕЦ- КТО СМОТРЕЛ КОД, ТОТ МОЛОДЕЦ----------------------------------+
//+------------------------------------------------------------------------------------+  
*/
  • 0
  • Просмотров: 4435
  • 30 января 2015, 21:58
  • div15
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Прошу добавить трал для ордеров
Следующая запись в группе  
Доработка советника
30 января 2015
31 января 2015

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

комментарий был удален 2015-02-02 20:41:57 div15

+
0
Немного поправил, чуть чуть добавил и вопрос:

avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 31 января 2015, 18:12
+
0
да только бай, потому что сел закрылся с профитом. и советник работать должен на ренко графиках
avatar

  15  div15 Автор Сообщений: 71 - div15

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

avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 1 февраля 2015, 00:19
+
0
советник работает не корректно, пропускает ордера, и после убыточной сделки должен открывать лот в 2 раза больше. то есть бай 0.1 сел 0.1, закрылась бай в минус. а сел в плюс, то открываем бай * лот экспонент, а сел 0.1 и.т.д.
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 2 февраля 2015, 20:33
+
0
Пока не получается сделать как надо. Как сделаю напишу.
avatar

  34  AM2 Сообщений: 15880 - Андрей

  • 2 февраля 2015, 21:15

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