[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 4 из 6«123456»
Форум Трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Исправление ошибок в советниках на новых билдах (Помощь в исправлении)
Исправление ошибок в советниках на новых билдах
Дата: Четверг, 04.09.2014, 12:55 | Сообщение # 1 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online

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

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

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

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

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

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

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




Прикрепления: 0900205.jpg(24Kb)
 
Дата: Вторник, 16.12.2014, 16:36 | Сообщение # 31 Написал: Nazar
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 12
Награды: 0
Статус: Offline
Здравствуйте! Советник открывает одновременно две-три позиции на BUY или SELL и выставляет им одинаковые SL\TP.
У меня вопрос как сделать чтобы размер SL и TP можно было менять для каждого ордера чтобы не были одинаковыми??
Нужно присвоить каждой из позиций свой магик?


Сообщение отредактировал Nazar - Вторник, 16.12.2014, 16:38
 
Дата: Среда, 17.12.2014, 22:54 | Сообщение # 32 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
Nazar, приветствую, 
если Вы хотите поставить каждому свой сл и тп можно вывести в настройки например стоплоссы ордеров, например для первого второго третьего и так далее
одинаковые всмысле по одной цене или одинаковые пункты?
магик лучше не трогать, я думаю советник завязан то на магике
 
Дата: Четверг, 18.12.2014, 16:18 | Сообщение # 33 Написал: Nazar
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 12
Награды: 0
Статус: Offline
Наверное надо разные магики для каждого ордера. Советник использует режим спрятаных SL/TP и модифицирует за магиком.а магик здесь только один
 
Дата: Четверг, 18.12.2014, 18:15 | Сообщение # 34 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
Nazar, я не знаю конструкции советники что он делает и особенно как он работает с магиком. Поэтому не могу дать однозначный ответ
 
Дата: Понедельник, 29.12.2014, 16:27 | Сообщение # 35 Написал: John174
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Offline
Привет всем!
помогите исправить ошибки!
советник торгует только на SELL,даже где должен открывать BUY

Советник писал по индикатору TMA with Distances.mq4
Он должен открывать ордер на продажу по пересечению верхней линии индикатора,и ордер на покупку по пересечению нижней линии индикатора.

Помогите его заставить открывать второй ордерSELL на месте TP (первого ордера SELL),но с другим лотом,и чтоб выстовлял SL по цене открытия первого ордераSELL, а TP выставлял когда советник откроет ордер на BUY на уровне SL(BUY), и TP ордера BUY выстовлял по уровню  SL второго ордера на SELL

Код
//+------------------------------------------------------------------+
//| Сова TMA Probnik.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

extern double Lots = 0.01;
extern int TakeProfit = 15;
extern int StopLoss = 15;
extern int Slippage = 5;
extern string comment = "Tma bot";
extern int Megic = 012;
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 PRICE_HIGH,PRICE_LOW,SL,TP,SL1,TP1;

int ticket;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
if(Digits==3 || Digits==5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}

return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
PRICE_HIGH= iCustom(Symbol(),0,"Tma",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0);
PRICE_LOW = iCustom(Symbol(),0,"Tma",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0);

if(Bid>=PRICE_HIGH && CountSell()==0)
{
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);

ticket=OrderSend(Symbol(),OP_SELL,0.04,Bid,Slippage,0,0,comment,Megic,0,Magenta);
if(ticket>=0)

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
bool modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
}

}

if(Ask<=PRICE_LOW && CountBuy()==0)
{
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(PRICE_HIGH * Point, Digits);

ticket=OrderSend(Symbol(),OP_BUY,0.06,Ask,Slippage,0,0,comment,Megic,0,Blue);
if(ticket<=0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
bool modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
}

}

if(Ask<=PRICE_LOW && CountSell()>0)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderMagicNumber()==Megic && OrderType()==OP_SELL)
bool close=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black);
}
}
}

if(Bid>=PRICE_HIGH && CountBuy()>0)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderMagicNumber()==Megic && OrderType()==OP_BUY)
bool close=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black);
}
}
}

return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
bool select=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 trade=OrdersTotal()-1; trade>=0; trade--)
{
bool select=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Megic)
{
if(OrderType()==OP_BUY)
count++;
}
}

return(count);
}
//+------------------------------------------------------------------+
 
Дата: Понедельник, 29.12.2014, 17:07 | Сообщение # 36 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
John174, попробуйте, я исправил только ошибки, без модификаций 

Код
//+------------------------------------------------------------------+  
//| Сова TMA Probnik.mq4 |  
//| Copyright 2014, MetaQuotes Software Corp. |  
//| https://www.mql5.com |  
//+------------------------------------------------------------------+  
#property copyright "Copyright 2014, MetaQuotes Software Corp."  
#property link "https://www.mql5.com"  
#property version "1.00"  
#property strict  

extern double Lots=0.01;
extern int TakeProfit=15;
extern int StopLoss = 15;
extern int Slippage = 5;
extern string comment="Tma bot";
extern int Megic=012;
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 PRICE_HIGH2,PRICE_LOW2,SL,TP,SL1,TP1;

int ticket;
//+------------------------------------------------------------------+  
//| |  
//+------------------------------------------------------------------+  
int init()
   {
    if(Digits==3 || Digits==5)
      {
       TakeProfit*=10;
       StopLoss *= 10;
       Slippage *= 10;
      }

    return(0);
   }
//+------------------------------------------------------------------+  
//| |  
//+------------------------------------------------------------------+  
int start()
   {
    PRICE_HIGH2= iCustom(Symbol(),0,"Tma",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,1,0);
    PRICE_LOW2 = iCustom(Symbol(),0,"Tma",TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate,2,0);

    if(Bid>=PRICE_HIGH2 && CountSell()==0)
      {
         {
          SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
          TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);

          ticket=OrderSend(Symbol(),OP_SELL,0.04,Bid,Slippage,0,0,comment,Megic,0,Magenta);
          if(ticket>=0)

             if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
                bool modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
         }

      }

    if(Ask<=PRICE_LOW2 && CountBuy()==0)
      {
       SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
       TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);

       ticket=OrderSend(Symbol(),OP_BUY,0.06,Ask,Slippage,0,0,comment,Megic,0,Blue);
       if(ticket<=0)
         {
          if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
             bool modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
         }

      }

    if(Ask<=PRICE_LOW2 && CountSell()>0)
      {
       for(int i=OrdersTotal()-1; i>=0; i--)
         {
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
            {
             if(OrderMagicNumber()==Megic && OrderType()==OP_SELL)
                bool close=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black);
            }
         }
      }

    if(Bid>=PRICE_HIGH2 && CountBuy()>0)
      {
       for(int i=OrdersTotal()-1; i>=0; i--)
         {
          if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
            {
             if(OrderMagicNumber()==Megic && OrderType()==OP_BUY)
                bool close=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black);
            }
         }
      }

    return(0);
   }
//+------------------------------------------------------------------+  
//| |  
//+------------------------------------------------------------------+  
int CountSell()
   {
    int count=0;
    for(int trade=OrdersTotal()-1; trade>=0; trade--)
      {
       bool select=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 trade=OrdersTotal()-1; trade>=0; trade--)
      {
       bool select=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Megic)
         {
          if(OrderType()==OP_BUY)
             count++;
         }
      }

    return(count);
   }
//+------------------------------------------------------------------+
 
Дата: Понедельник, 29.12.2014, 17:38 | Сообщение # 37 Написал: John174
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Offline
всеравно открывает сделки только на SELL
я его тестил в тестери он открывает только селл и при tp в 200 и sl в 50, начиная с 30 баксов на gbp-usd что интересно он неплохо идет в плюс
Прикрепления: 8225266.gif(9Kb)


Сообщение отредактировал John174 - Понедельник, 29.12.2014, 18:05
 
Дата: Понедельник, 29.12.2014, 18:06 | Сообщение # 38 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
попробуйте на всех тиках. и пришлите журнал тестера
 
Дата: Понедельник, 29.12.2014, 18:14 | Сообщение # 39 Написал: John174
Трейдер - Рядовой
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Offline
дизинформация) там просто удачный ход цены был ,поставил на год он слил и на других валютах тоже слил,журнал наверное нет смысла присылать
 
Дата: Понедельник, 29.12.2014, 18:16 | Сообщение # 40 Написал: expforex
Трейдер - Генералиссимус
Группа: Администраторы
Сообщений: 27
Награды: 0
Статус: Online
John174wink
 
Форум Трейдеров » Скрипты Советники Индикаторы для Metatrader4/Metatrader5 » MT 4 MQL программирование, помощь. » Исправление ошибок в советниках на новых билдах (Помощь в исправлении)
Страница 4 из 6«123456»
Поиск: