Новые сообщения · Участники · Правила форума · Поиск · RSS · Вход · Регистрация ·

Страница 5 из 6«123456»
Форум трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Исправление ошибок в советниках на новых билдах (Помощь в исправлении)
Исправление ошибок в советниках на новых билдах

expforexДата: Четверг, 04.09.2014, 12:55 | Сообщение # 1
Главный Администартор
Группа: Администраторы
Сообщений: 9079
Награды: 29
Статус: Offline


[Бонусы за сообщения ]


Исправление ошибок в советниках. Ошибки при компиляции? Мы постараемся Вам помочь.

С начала 2014 года компания MetaQuotes выпустила большое обновление для терминалов MetaTrader4.

В связи с этим, у трейдеров, которые не умеют программировать, возникли серьезные проблемы - советники попросту перестали работать.
Причина всему этому - более сложный язык программирования.
Эксперты, которые изначально были написаны правильно, не подвергаются такой проблеме. Но немало советников и индикаторов, которые изначально написаны неверно, вовсе отказались работать.
Есть несколько способов решения данной проблемы, от попросту - "забить" до исправления ошибок на профессиональном уровне.

Мы написали статью по стандартным ошибкам в старых экспертах, которые можно исправить:
Новый язык программирования, Исправление ошибок при компиляции экспертов

Но если у Вас возникли трудности с исправлением ошибок, мы постараемся Вам помочь.

Для того чтобы Вам помогли в данной ветке, выполните несколько шагов:

  • 1. Прикрепите эксперт в открытом коде с ошибками (Декомпил не приветствуется)
  • 2. Прикрепите информацию по данному эксперту, первоначальное ТЗ на разработку, либо документацию, что эксперт должен делать
  • 3. Прикрепите картинку с графика, где стоит эксперт, если он работает но не так.
  • 4. Опишите проблемы, которые возникли с экспертом на новом билде.
    Мы постараемся помочь Вам в решении данных проблем.




Прикрепления: 0900205.jpg(24Kb)


Программирование на заказ || Наши Разработки

 
Сообщение

Исправление ошибок в советниках. Ошибки при компиляции? Мы постараемся Вам помочь.

С начала 2014 года компания MetaQuotes выпустила большое обновление для терминалов MetaTrader4.

В связи с этим, у трейдеров, которые не умеют программировать, возникли серьезные проблемы - советники попросту перестали работать.
Причина всему этому - более сложный язык программирования.
Эксперты, которые изначально были написаны правильно, не подвергаются такой проблеме. Но немало советников и индикаторов, которые изначально написаны неверно, вовсе отказались работать.
Есть несколько способов решения данной проблемы, от попросту - "забить" до исправления ошибок на профессиональном уровне.

Мы написали статью по стандартным ошибкам в старых экспертах, которые можно исправить:
Новый язык программирования, Исправление ошибок при компиляции экспертов

Но если у Вас возникли трудности с исправлением ошибок, мы постараемся Вам помочь.

Для того чтобы Вам помогли в данной ветке, выполните несколько шагов:

  • 1. Прикрепите эксперт в открытом коде с ошибками (Декомпил не приветствуется)
  • 2. Прикрепите информацию по данному эксперту, первоначальное ТЗ на разработку, либо документацию, что эксперт должен делать
  • 3. Прикрепите картинку с графика, где стоит эксперт, если он работает но не так.
  • 4. Опишите проблемы, которые возникли с экспертом на новом билде.
    Мы постараемся помочь Вам в решении данных проблем.





Автор - expforex
Дата добавления - 04.09.2014 в 12:55

John174Дата: Понедельник, 29.12.2014, 18:18 | Сообщение # 41
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

два дня ковыряюсь с ним и не могу понять почему он торгует только ордерами на селл, причем даже там где должен открывать на бай cool

 
Сообщениедва дня ковыряюсь с ним и не могу понять почему он торгует только ордерами на селл, причем даже там где должен открывать на бай cool

Автор - John174
Дата добавления - 29.12.2014 в 18:18

mhitДата: Среда, 11.11.2015, 11:11 | Сообщение # 42
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Нужна помощь. В код :

нужно дописать таймер на открытие и закрытие сделки. Что бы сделка открывалась за определенное время до закрытия бара. время в секундах и отдельный таймер на закрытие сделки то же самое. параметры меняемые.  У меня не получается руки кривые. Если не жалко для вас это 2 минуты.

// ---
// закрытие сделки
if(find_orders(_MagicNumber))
{
if(cl_buy_sig())
{
cbm(_MagicNumber, _Slippage, OP_BUY);
}
if(cl_sell_sig())
{
cbm(_MagicNumber, _Slippage, OP_SELL);
}
}

// открытие сделки
// ---

// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_BUY)))
{
if(op_buy_sig() && LAST_BUY_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_BUY_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_BUY, OP_LOTS);
}
}
// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_SELL)))
{
if(op_sell_sig() && LAST_SELL_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_SELL_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_SELL, OP_LOTS);
}
}
// ---



Сообщение отредактировал mhit - Среда, 11.11.2015, 11:13
 
СообщениеНужна помощь. В код :

нужно дописать таймер на открытие и закрытие сделки. Что бы сделка открывалась за определенное время до закрытия бара. время в секундах и отдельный таймер на закрытие сделки то же самое. параметры меняемые.  У меня не получается руки кривые. Если не жалко для вас это 2 минуты.

// ---
// закрытие сделки
if(find_orders(_MagicNumber))
{
if(cl_buy_sig())
{
cbm(_MagicNumber, _Slippage, OP_BUY);
}
if(cl_sell_sig())
{
cbm(_MagicNumber, _Slippage, OP_SELL);
}
}

// открытие сделки
// ---

// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_BUY)))
{
if(op_buy_sig() && LAST_BUY_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_BUY_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_BUY, OP_LOTS);
}
}
// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_SELL)))
{
if(op_sell_sig() && LAST_SELL_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_SELL_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_SELL, OP_LOTS);
}
}
// ---

Автор - mhit
Дата добавления - 11.11.2015 в 11:11

mhitДата: Среда, 11.11.2015, 11:20 | Сообщение # 43
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Начал так : правильно?  дальше что не делаю не работает

// секунд от открытия бара 
input uint SecondsToOpen =50;
// секунд от открытия бара 
input uint SecondsToClose =20;

// получаем секунды
uint GetCurrentSecondFromStartBar()
{
return (uint)TimeCurrent() - (uint)iTime(NULL,0,0);
}

 
СообщениеНачал так : правильно?  дальше что не делаю не работает

// секунд от открытия бара 
input uint SecondsToOpen =50;
// секунд от открытия бара 
input uint SecondsToClose =20;

// получаем секунды
uint GetCurrentSecondFromStartBar()
{
return (uint)TimeCurrent() - (uint)iTime(NULL,0,0);
}

Автор - mhit
Дата добавления - 11.11.2015 в 11:20

expforexДата: Среда, 11.11.2015, 11:38 | Сообщение # 44
Главный Администартор
Группа: Администраторы
Сообщений: 9079
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

mhit, приветствую, во первых NULL нельзя использовать в названии символа,
только Symbol()

Код
// получаем секунды
uint GetCurrentSecondFromStartBar()
{
return (uint)TimeCurrent() - (uint)iTime(Symbol(),0,0);
}



Программирование на заказ || Наши Разработки

 
Сообщениеmhit, приветствую, во первых NULL нельзя использовать в названии символа,
только Symbol()
Код
// получаем секунды
uint GetCurrentSecondFromStartBar()
{
return (uint)TimeCurrent() - (uint)iTime(Symbol(),0,0);
}

Автор - expforex
Дата добавления - 11.11.2015 в 11:38

expforexДата: Среда, 11.11.2015, 11:45 | Сообщение # 45
Главный Администартор
Группа: Администраторы
Сообщений: 9079
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

в Вашем случае узнать сколько осталось до закрытия бара можно так:



Код
uint GetCurrentSecondFromStartBar()
{
return ((iTime(Symbol(),0,0)+Period()*60)-(TimeCurrent() - iTime(Symbol(),0,0)));
}
потом в коде на открытие задать

if(GetCurrentSecondFromStartBar()<=SecondsToOpen) // далее пошел код на открытие



Программирование на заказ || Наши Разработки

 
Сообщениев Вашем случае узнать сколько осталось до закрытия бара можно так:


Код
uint GetCurrentSecondFromStartBar()
{
return ((iTime(Symbol(),0,0)+Period()*60)-(TimeCurrent() - iTime(Symbol(),0,0)));
}
потом в коде на открытие задать

if(GetCurrentSecondFromStartBar()<=SecondsToOpen) // далее пошел код на открытие

Автор - expforex
Дата добавления - 11.11.2015 в 11:45

procomДата: Вторник, 13.12.2016, 12:32 | Сообщение # 46
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Добрый день,
помогите пожалуйста закрыть 1 Lot, если открыты 2 Lots на покупку.
Заранее благодарен.

if(Condition1 == true)
{
if(_sell==true || (_buy==false && _sell==false ))
{
if(Close_ord_by_type(1)==true)
{
_sell=false;
for(i=Appempts; i>0; i--)
{
if(OpenBuyPosition(Stop_order_distance, 0, Lots*2, MAGIC)==true)    //  2 Lots  BUY
{  break;

}
else Sleep(7000);
}
}
else Sleep(7000);
}
}

else if(Condition2 == true)
{
//  Неoбходимо закрыть 1 Lot BUY       ? ? ? ? ?
}

else if(Condition1 == false && Condition2 == false)
stop_work();

return(0);
}



Сообщение отредактировал procom - Вторник, 13.12.2016, 12:54
 
СообщениеДобрый день,
помогите пожалуйста закрыть 1 Lot, если открыты 2 Lots на покупку.
Заранее благодарен.

if(Condition1 == true)
{
if(_sell==true || (_buy==false && _sell==false ))
{
if(Close_ord_by_type(1)==true)
{
_sell=false;
for(i=Appempts; i>0; i--)
{
if(OpenBuyPosition(Stop_order_distance, 0, Lots*2, MAGIC)==true)    //  2 Lots  BUY
{  break;

}
else Sleep(7000);
}
}
else Sleep(7000);
}
}

else if(Condition2 == true)
{
//  Неoбходимо закрыть 1 Lot BUY       ? ? ? ? ?
}

else if(Condition1 == false && Condition2 == false)
stop_work();

return(0);
}

Автор - procom
Дата добавления - 13.12.2016 в 12:32

expforexДата: Вторник, 13.12.2016, 13:56 | Сообщение # 47
Главный Администартор
Группа: Администраторы
Сообщений: 9079
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

//+----------------------------------------------------------------------------+
//|  Автор    : Владислав Expforex www.expforex.com                  |
//+----------------------------------------------------------------------------+
//|  Описание :Закрытие позиций определенным лотом                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    order_symbol - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    order_type - операция                   (-1   - любая позиция)                  |
//|    order_magic - MagicNumber                (-1   - любой магик)                    |
//|    lot - лот который нужно закрыть , или 0 - закрыть весь лот                                                   |
//+----------------------------------------------------------------------------+

Код
void ClosePositionLot(string order_symbol="",int order_type=-1,int order_magic=-1,double lot=0)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {

                  bool   fc;
                  color  clClose;
                  double ll,pa,pb,pp;
                  int    dg=MarketInfo(OrderSymbol(),MODE_DIGITS),err,it;

                  if(OrderType()==OP_BUY || OrderType()==OP_SELL)
                    {
                     for(it=1; it<=3; it++)
                       {
                        if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
                        while(!IsTradeAllowed()) Sleep(5000);
                        RefreshRates();
                        pa=MarketInfo(OrderSymbol(), MODE_ASK);
                        pb=MarketInfo(OrderSymbol(), MODE_BID);
                        if(OrderType()==OP_BUY)
                          {
                           pp=pb; clClose=clCloseBuy;
                             } else {
                           pp=pa; clClose=clCloseSell;
                          }
                        ll=NormalizeDouble(lot,2);
                        if(lot==0)ll=OrderLots();
                        pp=NormalizeDouble(pp, dg);
                        fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
                        if(fc)
                          {
                           if(UseSound) PlaySound(SoundSuccess); break;
                             } else {
                           err=GetLastError();
                           if(UseSound) PlaySound(SoundError);
                           if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
                           Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
                    ErrorDescription(err),", try ",it);
                           Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
                           Print("order_symbol=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
                    "  tp=",OrderTakeProfit(),"  order_magic=",OrderMagicNumber());
                           Sleep(1000*5);
                          }
                       }
                    }
                  else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));

                 }
              }
           }
        }
     }
  }



Программирование на заказ || Наши Разработки

 
Сообщение//+----------------------------------------------------------------------------+
//|  Автор    : Владислав Expforex www.expforex.com                  |
//+----------------------------------------------------------------------------+
//|  Описание :Закрытие позиций определенным лотом                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    order_symbol - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    order_type - операция                   (-1   - любая позиция)                  |
//|    order_magic - MagicNumber                (-1   - любой магик)                    |
//|    lot - лот который нужно закрыть , или 0 - закрыть весь лот                                                   |
//+----------------------------------------------------------------------------+

Код
void ClosePositionLot(string order_symbol="",int order_type=-1,int order_magic=-1,double lot=0)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {

                  bool   fc;
                  color  clClose;
                  double ll,pa,pb,pp;
                  int    dg=MarketInfo(OrderSymbol(),MODE_DIGITS),err,it;

                  if(OrderType()==OP_BUY || OrderType()==OP_SELL)
                    {
                     for(it=1; it<=3; it++)
                       {
                        if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
                        while(!IsTradeAllowed()) Sleep(5000);
                        RefreshRates();
                        pa=MarketInfo(OrderSymbol(), MODE_ASK);
                        pb=MarketInfo(OrderSymbol(), MODE_BID);
                        if(OrderType()==OP_BUY)
                          {
                           pp=pb; clClose=clCloseBuy;
                             } else {
                           pp=pa; clClose=clCloseSell;
                          }
                        ll=NormalizeDouble(lot,2);
                        if(lot==0)ll=OrderLots();
                        pp=NormalizeDouble(pp, dg);
                        fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
                        if(fc)
                          {
                           if(UseSound) PlaySound(SoundSuccess); break;
                             } else {
                           err=GetLastError();
                           if(UseSound) PlaySound(SoundError);
                           if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
                           Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
                    ErrorDescription(err),", try ",it);
                           Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
                           Print("order_symbol=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
                    "  tp=",OrderTakeProfit(),"  order_magic=",OrderMagicNumber());
                           Sleep(1000*5);
                          }
                       }
                    }
                  else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));

                 }
              }
           }
        }
     }
  }

Автор - expforex
Дата добавления - 13.12.2016 в 13:56

procomДата: Четверг, 15.12.2016, 16:34 | Сообщение # 48
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Спасибо, но я только начинающий.
Пишет :
'ClosePositionLot' - function can be declared only in the global scope    EUR_ks_MY.mq4    222    6
А можно прислать весь мой код ?



Сообщение отредактировал procom - Четверг, 15.12.2016, 16:47
 
СообщениеСпасибо, но я только начинающий.
Пишет :
'ClosePositionLot' - function can be declared only in the global scope    EUR_ks_MY.mq4    222    6
А можно прислать весь мой код ?

Автор - procom
Дата добавления - 15.12.2016 в 16:34

expforexДата: Четверг, 15.12.2016, 18:22 | Сообщение # 49
Главный Администартор
Группа: Администраторы
Сообщений: 9079
Награды: 29
Статус: Offline


[Бонусы за сообщения ]

Ваш код который вы выложили - не полный, что там присылать то? если ВЫ прикрепите советника то это другое дело



Программирование на заказ || Наши Разработки

 
СообщениеВаш код который вы выложили - не полный, что там присылать то? если ВЫ прикрепите советника то это другое дело

Автор - expforex
Дата добавления - 15.12.2016 в 18:22

procomДата: Четверг, 15.12.2016, 18:29 | Сообщение # 50
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline


[Бонусы за сообщения ]

Да, хочу выслать советник. Как его присылать в mql или текстовый ?

 
СообщениеДа, хочу выслать советник. Как его присылать в mql или текстовый ?

Автор - procom
Дата добавления - 15.12.2016 в 18:29
Форум трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Исправление ошибок в советниках на новых билдах (Помощь в исправлении)
Страница 5 из 6«123456»
Поиск:


WebMoney Яндекс цитирования.