Ваши вопросы по языку MQL4

ale002

::: __,,,^._.^,,,__ :::
сов вообще не ведёт расчёты...

Такого не бывает, до какого-то условия он обязательно доходит. Вам надо определить в чём затык - поставьте в коде метки Print("тарарам") в ключевых местах. Так выясните которое условие не выполняется, тада станет понятно с чем конкретно бороться надо

Если у вас 2 ордера на этой свече, а нужен первый из них, знач искать надо предпоследний?
 

Алекc1234

Местный житель
Такого не бывает, до какого-то условия он обязательно доходит. Вам надо определить в чём затык - поставьте в коде метки Print("тарарам") в ключевых местах. Так выясните которое условие не выполняется, тада станет понятно с чем конкретно бороться надо

Если у вас 2 ордера на этой свече, а нужен первый из них, знач искать надо предпоследний?

Да, выходит, что предпоследний
 

hoz

Активный участник
Да, выходит, что предпоследний


По ходу предпоследний ордер выбирается так:

PHP:
OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
int ticket = OrderTicket();                  // тикет предпоследнего ордера
int beforeLastOOP = OrderOpenPrice();        // цена открытия предпоследнего ордера
int beforeLastOOT = OrderOpenTime();         // время открытия предпоследнего ордера
 

hoz

Активный участник
Возник вопрос. С массивами я уже сталкивался, как объявлять, задавать и вызывать значения элементов прекрасно понимаю, НО вот попался код, я начал его анализировать и у меня реально мозг начал закипать. Щяс я кратко напишу что где имеется по теме, дабы не вылаживать весь код и не трепать нервы окружающим :oops:

Массивы объявлены на глобальном уровне:

PHP:
int g_maPeriod[4] = {6, 25, 150, 250},             // Периоды обрабатываемых МА
   g_maPeriod[4] = {1, 2, 3, 4};                    // Признаки МАшек, добавляемые в Magic
                                                   // ..Number ордера к основному Magic


Это у нас в start:

PHP:
   int signal[4];
   CalcSignals(signal);


По сути массивами являются как g_maPeriod[4], g_maPeriod[4][/ B], так и signal[4] с одной лишь разницей, что последний объявлен не явно. Идём дальше.. Меня интересует то факт, как их вызывают и возвращают функции данного эксперта.

Вот тут массив в формальных параметрах объявлен как массив int& signal[]:

PHP:
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int& signal[])
{
   for (int i = 0; i < 4; i++)
   {   
      if (signal[i] == SIGNAL_BUY && FindOrders(g_signMA[i]) == 0)
         if (!OpenBuy(g_signMA[i]))
            return (false);

      if (signal[i] == SIGNAL_SELL && FindOrders(g_signMA[i]) == 0)
         if (!OpenSell(g_signMA[i]))
            return (false);
   }
 
   return (true);
}

А вот в этих функциях в формальных параметрах уже объявлена переменная int sing:

PHP:
//+-------------------------------------------------------------------------------------+
//| Открытие длинных позиций                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(int sign)
{
   int ticket = -1;
   string myNote = "Сов баянул";

   ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, i_slippage, 0, 0, myNote, 
                     i_myMagic + sign, 0, Blue);

   return (ticket > 0 && 
           OrderSelect(ticket, SELECT_BY_TICKET));
}
//+-------------------------------------------------------------------------------------+
//| Открытие коротких позиций                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(int sign)
{
   int ticket = -1;
   string myNote = "Сов шортанул";

   ticket = OrderSend(Symbol(), OP_BUY, 0.1, Bid, i_slippage, 0, 0, myNote, 
                     i_myMagic + sign, 0, Red);
 
   return (ticket > 0 && 
           OrderSelect(ticket, SELECT_BY_TICKET));
}


Хотя вызываются они опять же в вышеприведённой функции bool Trade() c массивом в параметрах. Почему так? Как это можно понимать? В учебнике я по этому поводу ничего адекватного вообще не нашёл.
 

Milord

Местный знаток
Вопрос мастерам MQL4???

как написать примерно кусок кода, по такой логике?:question:
есть 1 сигнал(1 переменная)X
есть 2 сигнал,(2 переменная) Y
есть 3 переменная B (баланс), величину переменной можно менять программно или в настройках, как написать логику работы такого "сумматора"(интегратора) чтобы в одном крайнем положении переменной В, на выходе сумматора был лишь 1 сигнал, в другом крайнем положении переменной В, на выходе сумматора был только сигнал 2, в среднем положении переменной В оба сигнала 1 и 2 были на выходе сумматора,диапазон переменной В от -100 до +100%, в среднем положении 0% -оба должны присутствовать, вы пользовались балансом на усилителе? тут та же логика.разница в том что тут не уровни напряжений , а логические сигналы 1 и 2
 

ale002

::: __,,,^._.^,,,__ :::
как написать примерно кусок кода, по такой логике?

Не совсем чёткие условия - от -100 до +100 есть как минимум 200 позиций, а не 3. Округлять? Переменные логические или численные? Yb't вариант кода при 2х ответах "да". И есчо - "сумматор" суммирует, а вам кажетсо надо аннулировать 1 из двух. Или таки складывать?

PHP:
// внешняя переменная:
extern int Баланс = 75; // баланс - целое число от -100 до 100

// ...

// локальные переменные сигналов в теле программы:
bool Сигнал_А, Сигнал_Б;

Сигнал_А = true;
Сигнал_Б = true;

// вызов функции контроля по внешней переменной:
Сигналоподавитель(Сигнал_А, Сигнал_Б, Баланс);

// ...

// функция контроля:
void Сигналоподавитель(bool& bСигнал_А, bool& bСигнал_Б, int iБаланс) {
	// Баланс ближе к 100%, сигнал А аннулируется:
	if(iБаланс > 50) {bСигнал_А = false; return;}
	// Баланс ближе к -100%, сигнал Б аннулируется:
	if(iБаланс < -50) {bСигнал_Б = false; return;}
	// Баланс ближе к 0, оба остаются в силе:
	return;
}
 

Актёр Актёр

Местный житель
Подскажите как увелить толщину линий индикатора TMA, что нужо прописать в коде??? Желательно чтобы линии были как фон, т.е чтоб цену видно было. Индюк на всякий случай прикрепляю.
 

Вложения

  • TMA.mq4
    8,4 КБ · Просмотры: 19

eevviill

Заблокирован
Подскажите как увелить толщину линий индикатора TMA, что нужо прописать в коде??? Желательно чтобы линии были как фон, т.е чтоб цену видно было. Индюк на всякий случай прикрепляю.
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
 

Актёр Актёр

Местный житель
Чё-то с прозрачностью не полчается, может чего не понимаю....можно ли сделать тотбражение как на скрине уровни поддержки сопротивления.
 

Вложения

  • 1.gif
    1.gif
    17,4 КБ · Просмотры: 33

eevviill

Заблокирован
Чё-то с прозрачностью не полчается, может чего не понимаю....можно ли сделать тотбражение как на скрине уровни поддержки сопротивления.
Если ты имеешь ввиду не невидимость, а именно прозрачность, то не знаю.
 

Dm_35

Местный знаток
Привет!
Помогите пожалуйста, что-то никак не соображу как заполнить массив

PHP:
_OrdersTotal = OrdersTotal();

for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{
  if ( _OrdersTotal >0 )
   {
     // заполняем массивы
    _OrderSymbol[_ExpertOrdersTotal] = OrderSymbol();			
    _OrderProfit  [_ExpertOrdersTotal]  = OrderProfit();
   _ExpertOrdersTotal ++;
   }
}

Если открыты несколько сделок по одному символу, как суммировать и внести в массив?
 

AlexeyVik

Программист mql4 mql5
Привет!
Помогите пожалуйста, что-то никак не соображу как заполнить массив

PHP:
_OrdersTotal = OrdersTotal();

for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{
  if ( _OrdersTotal >0 )
   {
     // заполняем массивы
    _OrderSymbol[_ExpertOrdersTotal] = OrderSymbol();            
    _OrderProfit  [_ExpertOrdersTotal]  = OrderProfit();
   _ExpertOrdersTotal ++;
   }
}
Если открыты несколько сделок по одному символу, как суммировать и внести в массив?
Здесь даже выделить ошибку невозможно.
Одна сплошная ошибка.

Если перебираешь ордера в цикле, то зачем дополнительный счётчик _ExpertOrdersTotal ++;
Где и как объявлены массивы?
 

Dm_35

Местный знаток
Здесь даже выделить ошибку невозможно.
Одна сплошная ошибка.

Если перебираешь ордера в цикле, то зачем дополнительный счётчик _ExpertOrdersTotal ++;
Где и как объявлены массивы?

Это кусок кода, причем тут ошибки и объявления массивов?
 

AlexeyVik

Программист mql4 mql5
Это кусок кода, причем тут ошибки и объявления массивов?
Да при том, что если массив объявлен как int а туда писать символ, то ничего не запишешь. Это во-первых.
Во-вторых, если счётчик цикла до z >= 0; то почему и зачем условие if(_OrdersTotal > 0)

Целесообразней будет цикл в сторону увеличения счётчика
for(z = 0; z < _OrdersTotal; z++)
{
// Здесь заполнение массива
}

Но остаётся непонятно для чего такой массив и когда он заполняется. Что надо будет сделать если после заполнения массива будет открыт ещё один ордер или не один.
Как я смог понять, это разные массивы, а не двух\трёх мерный и соответственно как их надо будет использовать. Если для анализа с учётом символа, то для чего тебе понадобилось суммировать профит ордеров одного символа? Если же для тренировки заполнения массивов... Тогда другое дело. Но тогда очень важно понимать, что ты не ошибся в объявлении массивов. И важно как объявлены массивы. На глобальном уровне или локально. Инициализируется массив перед заполнением или нет.
И даже сейчас я не уверен, что перечислил тебе ВСЕ нюансы работы с массивами.
 
Последнее редактирование:

Dm_35

Местный знаток
Но остаётся непонятно для чего такой массив и когда он заполняется. Что надо будет сделать если после заполнения массива будет открыт ещё один ордер или не один.
Как я смог понять, это разные массивы, а не двух\трёх мерный и соответственно как их надо будет использовать. Если для анализа с учётом символа, то для чего тебе понадобилось суммировать профит ордеров одного символа? Если же для тренировки заполнения массивов... Тогда другое дело. Но тогда очень важно понимать, что ты не ошибся в объявлении массивов. И важно как объявлены массивы. На глобальном уровне или локально. Инициализируется массив перед заполнением или нет.
И даже сейчас я не уверен, что перечислил тебе ВСЕ нюансы работы с массивами.

Не люблю я двухмерные :)
Собственно, если не влом и есть время, вот код, закомментирована функция, которая убирает дубликаты символов, но не суммирует профит.
И спасибо за помощь.
 

Вложения

  • AllOrdersControl.mq4
    7,1 КБ · Просмотры: 25
Верх