Кто может помочь с безубытком? (MQL4) - страница 3

 
Seric29:

Материал подан исчерпывающе многие начинающие столкнулись с проблемой что сами ни чего не смогли, а в особенности очень исчерпывающе объясняется код что означает написанное понять вообще невозможно. Так сделать как вы показали я смог но мне по коду понятно я могу его понять на 70% что-то просто догадываюсь но не могу составить алгоритм сам не получается. Переводить там ничего не надо есть очень краткое исчерпывающее описание. Я вставляю это дело в компилятор выдаёт ошибку

мало того что я и так не могу понять разобраться так ещё и код битый. Как исправить этот косяк с какой-то определённой переменной. А вы говорите примеры работают и сами же вставили эту ошибку.

Поглядите на этот косяк

extern double Rastvor    =28.0;    // Расстояние между МА 
extern double Lots       =0.1;     // Жестко заданное колич. лотов
extern double Rastvor    =28.0;    // Расстояние между МА 
extern double Lots       =0.1;     // Жестко заданное колич. лотов

закомментируйте 2 строчки.

Какие? Угадайте!

 
Alekseu Fedotov:

Поглядите на этот косяк

закомментируйте 2 строчки.

Какие? Угадайте!

 я невнимательный сам создал эту ошибку из-за того что десять раз копировал текст т. к. когда вставил код в компилятор выбилось 12 предупреждений function must return a value. Я вставил в функцию выхода return(Ticket); слово Ticket сначала я поудалял  return в некоторых местах переделал по другому предупреждения по пропадали но советник не запускается теперь попробовал вставитьTicket в качестве возвращаемого значения return во всех случаях вроде работает ну и пусть так будет мне просто интересно как работает код, а муйню написали а она даже нормально не компилируется ну и как мне дебилу учиться. Сейчас в ответ напишут а у нас с первого раза получилось и я лох.

 
@Yaroslav Brik @Yaroslav Brik
Yaroslav Brik:

 попробуй просто так вставить:


Попробуй трейлингстоп прописать, он автоматически будет подтягивать стоп-лосс в безубыток, справочник mql5 в помощь
 
Yaroslav Brik:

 попробуй просто так вставить:


лучше выбрать из двух зол меньшее зло, это значит лучше трейлинг стопа вариков нет, это сугубо моё мнение, а там дальше сам смотри
 
Пишу с таким вопросом значит история баров которая может храниться в архиве терминала составляет 10000 (любое максимальное число не суть), как сделать так чтобы он накапливал больше данных изменить число или чтобы он накапливал все бары. Что из этого можно сделать и как?
 

Пытаюсь написать примитивного советника который будет открывать 3 ордера при пересечении 2 скользящих средних. Хочу реализовать этот код

#property copyright ""
#property link      ""
#property version   "1.00"
#property strict

input double Lots=0.1;
input int SL=100;
input int TP=100;
#define Magic 23
input int Period_MA_1=1;
input int Period_MA_2=6;
input bool buy=false;      
input bool sell=false;

int OnInit()
  {


   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   int i=0; отвечает за счётчик ордеров
   int orders = 3; эта переменная отвечает за то сколько должно быть ордеров
   int ticket = 0; 
   double MA_1;
   MA_1=iMA(_Symbol,0,1,0,1,0,0);
   double MA_2;
   MA_2=iMA(_Symbol,0,6,0,1,0,0);
    //if(i<orders) если счётчик ордеров не равен 3 то выполнять условия записанной ниже
   if(buy)
     {
      while(i<orders)
        {

         if(MA_1>MA_2)
          RefreshRates();
         ticket=OrderSend(_Symbol,OP_BUY,Lots,Ask,0,Ask-SL*Point,Bid+TP*Point,"",Magic,0,clrGreen);
        
         i++;
        }
     }

   if(sell)
     {
      while(i<orders)
        {
         RefreshRates();
         if(MA_1<MA_2)
         ticket=OrderSend(_Symbol,OP_SELL,Lots,Bid,0,Bid+SL*Point,Ask-TP*Point,"",Magic,0,clrRed);
         i++;
        }
     }
//else                     поступить иначе если счётчик ордеров i==orders равен нужному количеству ордеров или ордеров больше единицы
//if(i==orders || i>=1)    либо равно одному ордеру т.е. не ноль
//rturn;                  то будет выход из функции по открытию ордеров открывать их не нужно потому что они есть
если запустить эти строчки ошибок нет но код не работает и ордеров вообще не открывает.

  }

void OnDeinit(const int reason)
  {
//---

  }

При выполнении условия на покупку или на продажу 3 сделки открываются но на каждом баре. Как мне записать условие чтобы если есть открытые сделки он больше их не открывал. Пробовал такие варианты кто может сказать как исправить ошибку.

 
Seric29:

Пытаюсь написать примитивного советника который будет открывать 3 ордера при пересечении 2 скользящих средних. Хочу реализовать этот код

При выполнении условия на покупку или на продажу 3 сделки открываются но на каждом баре. Как мне записать условие чтобы если есть открытые сделки он больше их не открывал. Пробовал такие варианты кто может сказать как исправить ошибку.

Сделайте переменную i статичной, а то она у вас каждый тик сбрасывается в 0.

static int i=0; отвечает за счётчик ордеров
 
Alexey Valeev:

Сделайте переменную i статичной, а то она у вас каждый тик сбрасывается в 0.

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

 
Vitaly Muzichenko:

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

Это понятно, просто это уже другой уровень, а человек на начальном этапе ещё, просто подсказал в чём у него ошибка. Разберётся с этим кодом, пойдёт дальше)
 
Alexey Valeev:
Это понятно, просто это уже другой уровень, а человек на начальном этапе ещё, просто подсказал в чём у него ошибка. Разберётся с этим кодом, пойдёт дальше)

То решение что он использует - сложнее, и не надёжное. Уж лучше сразу учится правильно 

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