Главная
Форум
MQL программирование, помощь, доработки

Для того, чтобы использовать все возможности сайта, мы рекомендуем Вам person_add Зарегистрироваться или person Войти

  • Страница 1 из 1
  • 1
Форум » Cтратегии и программирование на MQL » MQL программирование, помощь, доработки » Доработка советника WSFR-v3.8.5
Доработка советника WSFR-v3.8.5
Дата: Четверг, 13.07.2017, 12:23 | Сообщение # 1 Написал: Автор Fufik
Группа: БАН
Сообщений: 7
Награды: 0
Статус: Оффлайн

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

attach_file Прикрепления

WSFR-v3.8.5.mq4 (65.5 Kb)

Дата: Воскресенье, 16.07.2017, 17:55 | Сообщение # 2 Написал: Администратор expforex
Группа: Администраторы
Сообщений: 9910
Награды: 42
Статус: Оффлайн

прикрепите лог фал тестера и картинку

Дата: Понедельник, 17.07.2017, 19:08 | Сообщение # 3 Написал: Автор Fufik
Группа: БАН
Сообщений: 7
Награды: 0
Статус: Оффлайн

Цитата expforex ()
прикрепите лог фал тестера и картинку




Лог файлы не могу скинуть форум не позволяет ошибку у меня пишит видать много весит

attach_file Прикрепления

0780764.jpg (56.9 Kb) · 4458769.jpg (82.2 Kb) · 1760246.jpg (64.9 Kb)

Сообщение отредактировал Fufik - Понедельник, 17.07.2017, 19:11

Дата: Понедельник, 17.07.2017, 19:13 | Сообщение # 4 Написал: Администратор expforex
Группа: Администраторы
Сообщений: 9910
Награды: 42
Статус: Оффлайн

ну у Вас AutoMM стоит 0 - поэтому мартин не работает, вы бы хотя бы почитали что у Вас в коде написано по настройкам :-)

Дата: Понедельник, 17.07.2017, 19:30 | Сообщение # 5 Написал: Автор Fufik
Группа: БАН
Сообщений: 7
Награды: 0
Статус: Оффлайн

Цитата expforex ()
ну у Вас AutoMM стоит 0 - поэтому мартин не работает, вы бы хотя бы почитали что у Вас в коде написано по настройкам :-)
Я с фиксированным лотом торгую поэтому отключил мм, да мартин вобще не работает по всякому пробывал

Дата: Понедельник, 17.07.2017, 19:38 | Сообщение # 6 Написал: Администратор expforex
Группа: Администраторы
Сообщений: 9910
Награды: 42
Статус: Оффлайн

Fufik,
тут надо у автора спросить. почему?
я вижу так:
extern double AutoMM = 20.0; //--- ММ включается если AutoMM> 0. Процент риска. При RecoveryMode = FALSE, менять нужно только это значение.
//--- При AutoMM = 20 и депозите в 1000$, лот будет равен 0,2. Далее лот будет увеличиваться исходя из свободных средств, то есть уже при депозите в 2000$ лот будет равен 0,4.
extern double MultiLotPercent = 1.1; //--- Коэффициент умножение лота (Используется при RecoveryMode = True)

функция мартина рабочая и выглядит так:
 

Код
//--- Если ММ включен, то
   if (MultiLotPercent> 0.0 && AutoMM> 0.0) {
      
      //--- Обнуляем значения
      SumProfit = 0;
      OldOrdersCount = 0;
      loss = 0;
      LossOrdersCount = 0;
      pr = 0;
      ProfitOrdersCount = 0;
      //---
      
      //--- Выбираем закрытие ранее ордера
      for (int i = OrdersHistoryTotal() - 1; i>= 0; i--) {
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
               OldOrdersCount++; //--- Считаем ордера
               SumProfit += OrderProfit(); //--- и суммарный профит
               
               //--- Если суммарный профит больше pr (для начала больше 0)
               if (SumProfit> pr) {
                  //--- Инициализируем профит и счетчик прибыльных ордеров
                  pr = SumProfit;
                  ProfitOrdersCount = OldOrdersCount;
               }
               //--- Если суммарный профит меньше loss (для начала больше 0)
               if (SumProfit < loss) {
                  //--- Инициализируем просадку и счетчик убыточных ордеров
                  loss = SumProfit;
                  LossOrdersCount = OldOrdersCount;
               }
               //--- Если текущее кол-во подсчитанных ордеров больше или равно MaxAnalizCount (50), то в будущем считаем только свеженькие ордера а старые вычитаем.
               if (OldOrdersCount>= MaxAnalizCount) break;
            }
         }
      } //--- Закрытие for (int i = OrdersHistoryTotal() - 1; i>= 0; i--) {
      
      
      //--- Если число прибыльных ордеров меньше или равно числу лосей, то расчитываем значение умножения лота MultiLot
      if (ProfitOrdersCount <= LossOrdersCount) MultiLot = MathPow(MultiLotPercent, LossOrdersCount);
      
      //--- Если нет, то
      else {
         
         //--- Инициализируем параметры по профиту
         SumProfit = pr;
         OldOrdersCount = ProfitOrdersCount;
         LastPr = pr;
         LastCount = ProfitOrdersCount;
         
         //--- Выбираем закрытие ранее ордера (минус число прибыльных ордеров)
         for (i = OrdersHistoryTotal() - ProfitOrdersCount - 1; i>= 0; i--) {
            if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
               if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
                  //--- Если выбрано более 50 ордеров прекразщаем выбирать
                  if (OldOrdersCount>= MaxAnalizCount) break;
                  //---
                  OldOrdersCount++; //--- Считаем кол-во ордеров
                  SumProfit += OrderProfit(); //--- и профит
                  
                  //--- Если новый профит меньше предыдущего (LastPr), то
                  if (SumProfit < LastPr) {
                     //--- Переинициализируем значения профита и кол-во ордеров
                     LastPr = SumProfit;
                     LastCount = OldOrdersCount;
                  }
               }
            }
         } //--- Закрытие for (i = OrdersHistoryTotal() - ProfitOrdersCount - 1; i>= 0; i--) {
         
         //--- Если значение счетчика LastCount равно счетчику прибыльных ордеров или прошлый профит равен текщему, то
         if (LastCount == ProfitOrdersCount || LastPr == pr) MultiLot = MathPow(MultiLotPercent, LossOrdersCount); //--- расчитываем значение умножения лота MultiLot
         
         //--- Если нет, то
         else {
            //--- Делим положительный (loss - pr) на положительный (LastPr - pr) и сравниваем с риском, после расчитываем умножение лота MultiLot
            if (MathAbs(loss - pr) / MathAbs(LastPr - pr)>= (Risk + 100.0) / 100.0) MultiLot = MathPow(MultiLotPercent, LossOrdersCount);
            else MultiLot = MathPow(MultiLotPercent, LastCount);
         }
      }
   } //--- Закрытие if (MultiLotPercent> 0.0 && AutoMM> 0.0) {


может автор этим хотел что-то сказать?

Форум » Cтратегии и программирование на MQL » MQL программирование, помощь, доработки » Доработка советника WSFR-v3.8.5
  • Страница 1 из 1
  • 1
Поиск:
Expforex Expforex Идеи для Metatrader https://www.expforex.com/1NEWDESIGN/NEWLOGO/LOGONEW.png expforex@meta.ua Украина expforex2