[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 96

 

Я наверное что-то не понимаю:

extern double LotsStep = 0.1;
       double Lots;
...

int start()
{
   ...
   
   if (NewOrder)
   { 
      if (OrdersTotal() == 0)
         Lots = LotsStep;
      else
         Lots += LotsStep;
      
      Lots = TrueLots(Lots);
      if (Lots < 0)
      {
         Alert("Не хватает денег на ", DoubleToStr(-Lots, 2), " лотов!");
         Lots = 0;
         Buy  = False;
         Sell = False;
      }
      
      NewOrder = False;
   }
      
   //Блок открытия на бай
   
   ...
}

double TrueLots(double Lots)
{
   double Free    = AccountFreeMargin();
   double One_Lot = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   
   if (Lots > Max_Lot)
   {
      Alert("...");
      Lots = Max_Lot;
   }

   if (Lots*One_Lot > Free)
      return(-Lots);
   
   return(Lots);
}

 

Да и еще, одна сопуствующая проблема у меня при компеляции выходила ошибка '(' function definition unexpected, я вынес эту функцию " double LotSize()
" за start() ошибка исчезла, в результате чего эта функция стала увеличивать
каждый последующий открываемый лот в принципе, а мне бы хотелось, только в серии сигналов допустим на бай, а при поступлении противоположных сигналов, счетчик онулялся и начинала строится новая пирамида, если возможно конечно почему я и взял этот кусок кода потому как думал что именно он отвечает за данный шаг, оказалось не так...

 
MaxZ:

Я наверное что-то не понимаю:


Спасиб. сейчас попробую
 
SeALALex:
Вот как то так


Посмотри прицеп - поправь для себя.

Файлы:
b-lots.mqh  3 kb
 
SeALALex:

Спасиб. сейчас попробую

Добавил ещё проверку на возможность открытия заданного количества Lots. Импровизируйте и будет Вам счастье! :))


Логика следующая:

Если нет ордеров в рынке (здесь Я исключаю отложенные ордера), то присваиваем переменной Lots начальное значение (в данное случае тот самый шаг).

Если же уже есть ордера в рынке, то при каждом открытии параметр Lots будет увеличиваться на величину LotsStep.

Я не знаю, что за конкретная задача у Вас, поэтому и написал "импровизируйте".


Roman.:


Посмотри прицеп - поправь для себя.

Лучше уж Своими ручками всё постичь, заодно научишься кодить! :D

 
MaxZ:

Я наверное что-то не понимаю:


Максим, если у Вас время позволяет - посмотрите по этой теме... :-)))

Никак не могу прийти к "общему знаменателю" для всех советников сразу (универсальный вариант)... :-(((

В моих кодах советников - пишет о переполнении "дабла"...

На днях задам в той ветки подробный вопрос с приложением скринов...

П.С. Для каких-то вариантов сов - работает исправно, для каких-то нет... Сейчас там просто все сделано по книжке, включая умножение... Его произведение также необходимо разбить для универсального подхода на множители. Сделал массив, как Вы и рекомендовали для переменной TWR, но пока все работает не для всех советников, для каких - то все равно переполняется тип данных "дабл" при сделках до 1000 штук на истории...при итоговом подсчете оптимального f.

 
MaxZ:

Я наверное что-то не понимаю:


Ну простите сходу не всегда ловлю


Ошибка NewOrder -'NewOrder' - variable not defined, где мне ее назвать сначала?

 
Roman.:


Максим, если у Вас время позволяет - посмотрите по этой теме... :-)))

А что Я должен увидеть в ветке форума ProCapital'а?? :))


Roman.:


Никак не могу прийти к "общему знаменателю" для всех советников сразу (универсальный вариант)... :-(((

В моих кодах советников - пишет о переполнении "дабла"...

На днях задам в той ветки подробный вопрос с приложением скринов...

П.С. Для каких-то вариантов сов - работает исправно, для каких-то нет... Сейчас там просто все сделано по книжке, включая умножение... Его произведение также необходимо разбить для универсального подхода на множители. Сделал массив, как Вы и рекомендовали для переменной TWR, но пока все работает не для всех советников, для каких - то все равно переполняется тип данных "дабл" при сделках до 1000 штук на истории...при итоговом подсчете оптимального f.

В ветке ProCapital'а?? Почему там? Выложите, Я посмотрю скрины, подумаю.
 
MaxZ:

А что Я должен увидеть в ветке форума ProCapital'а?? :))


В ветке ProCapital'а?? Почему там? Выложите, Я посмотрю скрины, подумаю.


Извини, в буфере была не та ссыль - старая... :-)))

Вот.

Сейчас сам на работе - подробный вопрос со скринами - выложу в той же ветке сегодня вечером или завтра. :-)))

 
SeALALex:

Ну простите сходу не всегда ловлю


Ошибка NewOrder -'NewOrder' - variable not defined, где мне ее назвать сначала?

С опытом придёт! ;)


NewOrder - это переменная типа bool. Её нужно объявить в начале функции Start(), например. Хотя зависит всё от структуры Вашего кода.

Выставляем переменную NewOrder в True, когда хотим открыть ордер.

Например, советник работает по ценам открытия и индикатору Moving Average:

if ((Close[2] <= MA2 && Close[1] > MA1) || (Close[2] < MA2 && Close[1] >= MA1))
{
   NewOrder = True;
   Buy = True;
}
Причина обращения: