Имеется интересная торговая идея. Помогите найти ошибки в коде (mql4). - страница 16

 
Sergey Gritsay:
Исправил баги в версии для МТ5

Спасибо за обновления... мт5 за неделю прилично поработал... Если считать от 1000 больше 10%...Вот картинка... было больше 100 сегодня поистратил малость... теперь этот обновленный буду смотреть, еще надумал соединить мт4 с мультом cmilliona grid6 https://www.mql5.com/ru/code/12971 посмотреть, как будут в паре работать...))

График CHFJPY, H1, 2016.03.18 12:21 UTC, MetaQuotes Software Corp., MetaTrader 5, Demo

Мультивалютный сеточник GRID 6 SYMBOLS
Мультивалютный сеточник GRID 6 SYMBOLS
  • голосов: 19
  • 2015.05.11
  • Vladimir Khlystov
  • www.mql5.com
Советник выставляет сети стоп-ордеров по нескольким инструментам, далее закрывает все при достижении указанной прибыли.
 
Последняя версия - работает четко - можно пипсовать - при закрытии руками открывает в том же направлении, надо бы какую никакую задержку... стал тралить чуть больше нуля...2-4 пункта, это если сразу в обратку идет...долг думает - стрелки уже давно стоят, а позиции нет... и еще, стал больлше сигналов выдавать в сравнении с предыдущими - ну это так, грубый подсчет... ну и все таки это лучший вариант...Спасибо еще раз... что-то остальные молчат - ау-ау кто еще что нашел... или не хотят сглазить...))
 
Сергей Криушин:
Последняя версия - работает четко - можно пипсовать - при закрытии руками открывает в том же направлении, надо бы какую никакую задержку... стал тралить чуть больше нуля...2-4 пункта, это если сразу в обратку идет...долг думает - стрелки уже давно стоят, а позиции нет... и еще, стал больлше сигналов выдавать в сравнении с предыдущими - ну это так, грубый подсчет... ну и все таки это лучший вариант...Спасибо еще раз... что-то остальные молчат - ау-ау кто еще что нашел... или не хотят сглазить...))
если символов много, то подтормаживает, пока он все их просчитает. И по идее не должен, открывать пока не наступит новый бар, то есть должен совершать на одном баре одну сделку.
 

Склеил сигналы данной стратегии со своим мартин советником, вот такой результат  с января 2015 по сегодня

 EURUSD: 

 

USDCHF:

 

 
Sergey Gritsay:

Склеил сигналы данной стратегии со своим мартин советником, вот такой результат  с января 2015 по сегодня

 EURUSD: 

 

USDCHF:

 

В мт5 тоже есть неплохой Мартин от https://www.mql5.com/ru/code/13315 - последнюю убыточную сделку умножает... вот только этих сделок с убытком часто 2е попадает...
//+------------------------------------------------------------------+
//| Виртуальный стоп                                                 |
//+------------------------------------------------------------------+
void PutLable(const string name="",datetime time=0,double price=0,const color clr=clrGreen)
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- Создаем метку
   if(!ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price))
     {
      Print(__FUNCTION__,
            ": не удалось создать левую ценовую метку! Код ошибки = ",GetLastError());
      return;
      //--- установим цвет метки
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      //--- установим стиль окаймляющей линии
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
      //--- установим размер метки
      ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isNewBar(string symbol,ENUM_TIMEFRAMES timeframe)
  {
//---- получим время появления текущего бара
   datetime TNew=datetime(SeriesInfoInteger(symbol,timeframe,SERIES_LASTBAR_DATE));
   datetime m_TOld=0;
//--- проверка на появление нового бара
   if(TNew!=m_TOld && TNew)
     {
      m_TOld=TNew;
      //--- появился новый бар!
      return(true);
      Print("Новый бар!");
     }
//--- новых баров пока нет!
   return(false);
  }
//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
//--- текущее время
   datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

//--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем 
      last_time=lastbar_time;
      return(false);
     }

//--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }  
//+------------------------------------------------------------------+
//| Считаем лот в зависимости от полученного профита                 |
//+------------------------------------------------------------------+
double Volume(void)
  {
   double lot=Lots;
//--- Получим доступ к истории
   HistorySelect(0,TimeCurrent());
//--- Сделки в истории
   int orders=HistoryDealsTotal();
//--- Тикет последней сделки  
   ulong ticket=HistoryDealGetTicket(orders-1);
   if(ticket==0)
     {
      Print("Нет сделок в истории! ");
      lot=Lots;
     }
//--- Профит сделки
   double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
//--- Лот сделки
   double lastlot=HistoryDealGetDouble(ticket,DEAL_VOLUME);
//--- Профит отрицательный
   if(profit<0.0)
     {
      //--- Увеличиваем следующий лот
      lot=lastlot*KLot;
      Print(" Cделка закрыта по стопу! ");
     }
//--- Приводим лот к минимальному
   double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   if(lot<maxvol)
      lot=maxvol;
//--- Если лот больше максимального то начальный лот
   if(lot>MaxLot)
      lot=Lots;
//--- Возвращаем торговый объем
   return(lot);
  }
//+------------------------------------------------------------------+
//| Смотрим тип последней закрытой сделки                            |
//+------------------------------------------------------------------+
int LastDealType(void)
  {
   int type=0;
//--- Получим доступ к истории
   HistorySelect(0,TimeCurrent());
//--- Сделки в истории
   int orders=HistoryDealsTotal();
//--- Тикет последней сделки  
   ulong ticket=HistoryDealGetTicket(orders-1);
//--- Нет сделок в истории
   if(ticket==0)
     {
      Print("Нет сделок в истории! ");
      type=0;
     }
   if(ticket>0)
     {
      //--- Последняя сделка BUY 
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)==DEAL_TYPE_BUY)
        {
         type=2;
        }
      //--- Последняя сделка SELL
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)==DEAL_TYPE_SELL)
        {
         type=1;
        }
     }
//---
   return(type);
  }
Well Martin
Well Martin
  • голосов: 19
  • 2015.06.25
  • Andrew Kornishkin
  • www.mql5.com
Советник Well Martin на основе двух индикаторов: Bollinger Bands и ADX.
 
Пытался перевести под RSI индикатор - не получилось...видимо с библиотекой не совпадает...
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE Get_Signal(string symbol,int index)
  {
   double rsi_s[3];
   double rsi_f[3];
   double thv[1];
   ArrayInitialize(rsi_s,0);
   ArrayInitialize(rsi_f,0);
   ArrayInitialize(thv,0);

   if(Bars(symbol,TF_ATR)<Period_ATR+1)return(WRONG_VALUE);
   if(Bars(symbol,PERIOD_CURRENT)<period_RSI_F+1)return(WRONG_VALUE);

   if(IndicatorTrend==RSI)
     {
      if(Bars(symbol,PERIOD_CURRENT)<period_RSI_S+1)return(WRONG_VALUE);
      if(m_rsi_s[index]==INVALID_HANDLE || m_rsi_s[index]==0){m_rsi_s[index]=iRSI(symbol,PERIOD_CURRENT,period_RSI_S,PRICE_CLOSE);return(WRONG_VALUE);}
      int i=0;
      do
        {
         if(i>Bars(symbol,PERIOD_CURRENT))break;

         if(rsi_s[1]>100.0)trend[index]=ORDER_TYPE_BUY;
         if(rsi_s[1]<-100.0)trend[index]=ORDER_TYPE_SELL;
         if(rsi_s[1]>100.0  &&  rsi_s[0]<100.0)trend[index]=ORDER_TYPE_BUY;
         if(rsi_s[1]<-100.0 && rsi_s[0]>-100.0)trend[index]=ORDER_TYPE_SELL;
         i++;
        }
      while(trend[index]==WRONG_VALUE && !IsStopped());
     }
   if(IndicatorTrend==THV4)
     {
      if(m_thv[index]==INVALID_HANDLE || m_thv[index]==0){m_thv[index]=iCustom(symbol,PERIOD_CURRENT,"::Indicators\\THV4");return(WRONG_VALUE);}
      if(CopyBuffer(m_thv[index],1,1,1,thv)<1) return(WRONG_VALUE);
      if(thv[0]==1.0)trend[index]=ORDER_TYPE_BUY;
      if(thv[0]==0.0)trend[index]=ORDER_TYPE_SELL;
     }

   if(m_rsi_f[index]==INVALID_HANDLE || m_rsi_f[index]==0){m_rsi_f[index]=iRSI(symbol,PERIOD_CURRENT,period_RSI_F,PRICE_CLOSE);return(WRONG_VALUE);}
   if(CopyBuffer(m_rsi_f[index],0,0,3,rsi_f)<3) return(WRONG_VALUE);

      
     
   while(trend[index]==WRONG_VALUE && !IsStopped());

   if(CopyBuffer(m_rsi_f[index],0,0,3,rsi_f)<3) return(WRONG_VALUE);

   if(trend[index]==ORDER_TYPE_BUY)
     {
      if(signal_01 && rsi_f[1]<-100.0)return(ORDER_TYPE_BUY);
      if(signal_02 && rsi_f[1]<-100.0 && rsi_f[0]>-110.0)return(ORDER_TYPE_BUY);
      if(signal_03 && rsi_f[1]>-100.0 && rsi_f[0]<-110.0)return(ORDER_TYPE_BUY);
      if(signal_04 && rsi_f[1]>100.0 && rsi_f[0]<110.0)return(ORDER_TYPE_BUY);
      if(signal_05 && rsi_f[1]>100.0)return(ORDER_TYPE_BUY);
     
     }
   if(trend[index]==ORDER_TYPE_SELL)
     {
      if(signal_01 && rsi_f[1]>100)return(ORDER_TYPE_SELL);
      if(signal_02 && rsi_f[1]>100 && rsi_f[0]<110)return(ORDER_TYPE_SELL);
      if(signal_03 && rsi_f[1]<100 && rsi_f[0]>110)return(ORDER_TYPE_SELL);
      if(signal_04 && rsi_f[1]<-100 && rsi_f[0]>-110)return(ORDER_TYPE_SELL);
      if(signal_05 && rsi_f[1]<-100)return(ORDER_TYPE_SELL);
     
     }

   return(WRONG_VALUE);
  }
 
Сергей Криушин:
Пытался перевести под RSI индикатор - не получилось...видимо с библиотекой не совпадает...
А куда CopyBuffer потерял в блоке определения тренда, и у RSI уровни 70 и 30 стандартные.
 
Sergey Gritsay:
А куда CopyBuffer потерял в блоке определения тренда, и у RSI уровни 70 и 30 стандартные.
да что-то я попутал... что-то у меня тоже сотня в голове сидела... да думал так легко и просто...))) бум менять...
 

Подскажите куда написать или кто поможет исправить 2 ошибки в советнике  '}' - unexpected end of program '{' - unbalanced parentheses TMA.mq4

extern int   TakeProfit       =100;
extern int   StopLoss         =50;
extern double Lots            = 0.01;
extern int    Slippage        =5;
extern string comment         ="Продажа";
extern int    Megic           = 123;
extern string Indi            = "данные индикатора";
extern string TimeFrame       = "current time frame";//текущее время кадра
extern int    HalfLength      = 56;
extern int    Price           = PRICE_CLOSE;
extern double ATRMultiplier   = 2.0;
extern int    ATRPeriod       = 100;
extern bool   Interpolate     = true;

double PriceHigh, PriceLow, SL, TP;
int ticket;

int init()
{
     if(Digits==3|| Digits==5)
{    
     
  
 TakeProfit*=10;
    StopLoss*=10;
     Slippage*=10;
     
     
}   
   
    return(0);
    
}

int start()

{
      PriceHigh= iCustom(Symbol(),0,"TMA with Distancer",TimeFrame,HalfLength,Price, ATRMultiplier,ATRPeriod, Interpolate,1,0);
      PriceLow= iCustom(Symbol(),0,"TMA with Distancer",TimeFrame,HalfLength,Price, ATRMultiplier,ATRPeriod, Interpolate,2,0);
    
      if(Bid>=(PriceHigh);
     {
      SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
      TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);
      
     
     ticket=OrderSend(Simbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,123,0,Maroon);
     
     
 
    
     if(ticket>0);
     
{ 
   if  (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true);
      
      OrderModify(ticket,OrderOpenPrice,ST,TP,0);
      
     }
}
      

   if(Ask<0);
{
   ST=NormalizeDouble(Ask-StopLoss*Point,Digits);
   TP=NormalizeDouble(Ask+TakeProfit*Point,Digits);
  
     ticket=OrderSend(Simbol(),OP_BUY,Lots,Ask,Slippage,0,0,comment,123,0,clrDarkBlue);
     

    
     if(ticket>0);
     
{ 
   if  (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true);
       
      OrderModify(ticket,OrderOpenPrice,ST,TP,0);
     
     }
     return(0);
     
 }

  int CountSell()
  {
   int count=0;
   for(int trede=OrdersTotal()-1;tred>=0;tread--)
   {
    OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Megic)
    {
    if (OrderType()==OP_SELL)count==;
    }
    }
    return(count);
    }
    
        
 int CountBuy()
  {
   int count=0;
   for(int trede=OrdersTotal()-1;tred>=0;tread--)
   {
    OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Megic)
    {
    if (OrderType()==OP_BUY)count==;
    }
    }
    return(count);
    }


 
vladislavch19:

Подскажите куда написать или кто поможет исправить 2 ошибки в советнике  '}' - unexpected end of program '{' - unbalanced parentheses TMA.mq4



Пожалуйста, вставляйте код правильно: Правильно вставляем код на форуме (я исправил Ваше сообщение).

 

Добавлено: также настоятельно рекомендую использовать стилизатор кода - это поможет выявлять ошибки (Работа с исходным кодом: Стилизатор - Разработка программ). 

Причина обращения: