Ответить
22.01.2015, 07:25
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Пазл начал складываться.
Без #property strict ошибки нет, значит надо просто очистить массив.
Теперь у меня тупик, как это сделать.
Может есть у кого варианты?
Без #property strict ошибка никуда не делась, только лишь игнорируется. Типа, получили хрень какую-то, ну и хрен с ней... пойдём дальше...
Очищать массив нет никакого смысла. Проблема не в том, что массив заполнен, а в том что индекс массива при заполнении или чтении превышает максимальное значение.
Пример получения ошибки array out of range

Код:
#property strict

int arr[5]; // индекс такого массива может принимать значения 0, 1, 2, 3, 4

void OnTick()
{
  for(int i = 0; i <= 10; i++)
   {
     arr[i] = i; // как только i станет равным 5 мы получим ошибку array out of range
   }
}
Если убрать #property strict то цикл продолжится до i = 10. Не получилось записать в массив, ну и хрен с ним... Как программист написал так и получит результат...
Директива #property strict выполняет роль помошника, при таких ошибках предупреждает о получении, возможно не такого результата какой ожидается и требует привести код в надлежащий вид исключив неоднозначные варианты. Это и есть одно из отличий нового mql4.

Все просто - получение даты на новом баре, использовать можно в индикаторах для определения аккумуляции, в советниках как импульсную функцию, да и много куда можно засунуть.
Получить дату на новом баре можно и без структуры. Да и со структурой не сложно.

Код:
MqlDateTime dt1;

// Заполнение структуры
TimeToStruct(Time[0], dt1); // Можно любое другое время и дату.

int CurrentDay = dt1.day;
А вот что ты имеешь ввиду под аккумуляцией и импульсной функцией? Увы...

Последний раз редактировалось AlexeyVik; 22.01.2015 в 07:36.
23.01.2015, 11:15
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 601
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Профи MQL4 - Как правильно написать код???

у меня возник вопрос как разделить по магику число открытых ордеров, если в советнике использовано две ТС, то есть на каждую ТС свой магик, то как сделать так, чтобы во внешних настройках задавать максимальное число открытых ордеров независимо в каждой ТС, ниже кусок кода как я его вижу, добавьте что и как нужно в него,я не хочу сложное решение, а как можно проще и короче в коде...да, я написал начало, и просил добавить что нету в моем коде... пишу в старом билде МЕ, извиняйте новый еще не освоил...
ЗАРАНЕЕ СПАСИБО!

PHP код:
extern int MaxTrades1 10;
extern int MaxTrades2 10;
extern int magic1 111;
extern int magic2 333;


int start() 
{
//---------TC1------------------
if(A>B)
 {
 
OrderSend(...);
 }

//----------TC2-----------------
if(C>D)
 {
 
OrderSend(...);
 }
//-----
}
//-----------end------------- 
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
24.01.2015, 16:20
Аватар для gince
gince gince на форуме Местный знаток
Регистрация: 09.09.2008 / Адрес: Литва / Сообщений: 448
Поблагодарили 810 раз(а) / Репутация: 810
  • Отправить сообщение для gince с помощью Skype™
Привет .

Нажав на маленкую кнопочку "Move" можно перетащить все кнопки и "Label" в нам удобное место для дальнейшей работы. Но так неполучаеться.

Хочу сделать, чтобы "Label" при перетаскувании кнопок тоже паралельно перетаскивался, но он перетаскивается в противоположную сторонуи по высоте и по ширине. На сколько я понимаю, так тут проблема в параметрх

OBJPROP_XDISTANCE
OBJPROP_YDISTANCE
OBJPROP_CORNER
и еще, проблема в том, что перетаскивание и смена текста происходит с разных функций.Смена текста происходит при нажатий кнопки "change".

И еще вопрос, как изменит на кнопке "change" текст при ее нащатие ?



Будте добры, помогите разобратся.
Гинтарас
24.01.2015, 18:00
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 601
Поблагодарили 708 раз(а) / Репутация: 711
"у меня возник вопрос как разделить по магику число открытых ордеров, если в советнике использовано две ТС, то есть на каждую ТС свой магик, то как сделать так, чтобы во внешних настройках задавать максимальное число открытых ордеров независимо в каждой ТС, ниже кусок кода как я его вижу, добавьте что и как нужно в него,я не хочу сложное решение, а как можно проще и короче в коде...да, я написал начало, и просил добавить что нету в моем коде... пишу в старом билде МЕ, извиняйте новый еще не освоил...
ЗАРАНЕЕ СПАСИБО!"


Снимаю свой вопрос - он уже решен!
как говорится - получи ответ, и реши проблему еще лучше...
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 24.01.2015 в 18:05.
_SERG_ 
25.01.2015, 15:34
Аватар для Baburek
Baburek Baburek вне форума Прохожий
Регистрация: 26.11.2014 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1

Вопрос Помогите написать советника

Добрый день!

Уважаемые господа программисты. Столкнулся с проблемой при написании советника. я в это деле новичок, по этому ума не хватает)). Кто чем может помогите).
Моей целью является написание советника, что бы он подсчитывал объем лотов отрытых ордеров другого советника (с имеющимся магиком) и при превышении этого объема лотов он открывал локовый ордер в обратную сторону, что бы защитить депозит от слива. Что бы при возвращении с работы домой можно было все это дело руками разрулить).
Начал писать. Наткнулся на команду "GetAmountLotFromOpenPos".
Начал с ней магические действия делать, но она все равно не заработала.
Помогите плиз. Может кто то, что то подобное делал уже.
25.01.2015, 21:13
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Код:
int i, k = OrdersTotal();
double r = 0.0;

for(i = 0; i < k; i++)
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      if(OrderSymbol() == _Symbol)
         if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            if(OrderMagicNumber() == mn)
               r += OrderLots();
Это код для посчета лотов по MagicNumber
27.01.2015, 07:40
Аватар для kamilkz
kamilkz kamilkz на форуме Почётный гражданин
Регистрация: 10.03.2010 / Сообщений: 298
Поблагодарили 339 раз(а) / Репутация: 340
Код HTML:
int lia_unused_20[][];
Подскажите, в новом билде при компиляции выдает ошибку:
'[' - invalid index value
Как исправить?
27.01.2015, 08:15
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Код HTML:
int lia_unused_20[][];
Подскажите, в новом билде при компиляции выдает ошибку:
'[' - invalid index value
Как исправить?
Ну если попытаться потелепатить, то получается что этот массив передаётся в функцию, а в новом билде массивы должны передаваться ссылкой на массив.
Но это всего лишь проверка моих телепатических способностей.
27.01.2015, 08:47
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Вроде как нельзя объявить двумерный массив динамическим.
27.01.2015, 09:01
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Вроде как нельзя объявить двумерный массив динамическим.
Да. Ты прав. Плохой из меня телепат.
27.01.2015, 10:18
Аватар для djasper
djasper djasper вне форума Интересующийся
Регистрация: 26.03.2013 / Сообщений: 16
Поблагодарили 0 раз(а) / Репутация: 1
Доброе время суток Уважаемые. Подскажите пожалуйста как прописать следующее условие: Если N-е количество баров назад находятся в определённом диапозоне пунктов тогда...
Например: если от 3 до 7 баров находятся в диапазоне 20 пипсов тогда...
27.01.2015, 11:20
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Доброе время суток Уважаемые. Подскажите пожалуйста как прописать следующее условие: Если N-е количество баров назад находятся в определённом диапозоне пунктов тогда...
Например: если от 3 до 7 баров находятся в диапазоне 20 пипсов тогда...
Код:
ushort backBars = 7;
ushort pointDistance = 200;
double highBar = 0, lowBar = 0;
for(int i = 0; i <= backBars; i++)
{
   if(High[i] > highBar)
      highBar = High[i];
   if(Low[i] < lowBar || lowBar == 0)
      lowBar = Low[i];
   if((highBar - lowBar) / _Point > pointDistance)
      return(true);
}
return(false);
28.01.2015, 13:48
Аватар для vetallic
vetallic vetallic вне форума Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
всем привет!
помогите дописать плиз,
- нужен размер открытых ордеров разных пар

напр:
EURUSD - лот 0,02
ПИЗUSD - лот 0,01

...
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderType() == OP_BUY && OrderSymbol() == "USDCAD" && OrderMagicNumber() == MN)
...
28.01.2015, 14:15
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Цитата:
всем привет!
помогите дописать плиз,
- нужен размер открытых ордеров разных пар
http://forexsystemsru.com/951607-post3466.html
28.01.2015, 14:43
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
всем привет!
помогите дописать плиз,
- нужен размер открытых ордеров разных пар

напр:
EURUSD - лот 0,02
ПИЗUSD - лот 0,01

...
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if (OrderType() == OP_BUY && OrderSymbol() == "USDCAD" && OrderMagicNumber() == MN)
...
Сколько пар и какие известно, или это нужно вычислять?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
28.01.2015, 14:46
Аватар для vetallic
vetallic vetallic вне форума Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
Сколько пар и какие известно, или это нужно вычислять?
желательно вычислить открытую
28.01.2015, 15:02
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
желательно вычислить открытую
Кого открытую?
По скольким парам считать известно? Строго 2 пары, строго 5 пар, или количество пар может меняться и его надо вычислить?
Названия пар по которым надо считать известно? Торговля ведётся по определённым парам или набор пар может меняться в процессе торговли?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
28.01.2015, 15:13
Аватар для vetallic
vetallic vetallic вне форума Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
Кого открытую?
По скольким парам считать известно? Строго 2 пары, строго 5 пар, или количество пар может меняться и его надо вычислить?
Названия пар по которым надо считать известно? Торговля ведётся по определённым парам или набор пар может меняться в процессе торговли?
- пара может быть любая (в зависимости от сигнала на открытие по любой паре)
- пар может быть много (так же - в зависимости от сигнала на открытие по любой паре)
- набор пар может меняться в процессе
- на каждой паре может быть только 1 ордер (либо бай либо селл)
- нужно суто снять лоты с открытых позиций всех открытых пар, чтоб потом работать с данными дальше...
28.01.2015, 17:00
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
- пара может быть любая (в зависимости от сигнала на открытие по любой паре)
- пар может быть много (так же - в зависимости от сигнала на открытие по любой паре)
- набор пар может меняться в процессе
- на каждой паре может быть только 1 ордер (либо бай либо селл)
- нужно суто снять лоты с открытых позиций всех открытых пар, чтоб потом работать с данными дальше...
Тогда так:
Код:
uint StructLen=0;
   //Структура массив для символов и лотов
   struct Lots{string symbol; double lots;};
   Lots lots[];
   ArrayResize(lots,1);
   lots[0].symbol="";
   //Цикл перебора ордеров
   for(int i=OrdersTotal()-1; i>=0; i--)
      {
      ResetLastError();
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         Print("Ордер не выбран, ошибка ", _LastError);
         continue;
         }
      //Пропустить ордера чужих маджиков
      if(OrderMagicNumber()!=Magic)continue;
      StructLen++;
      //Если длина массива не =1, увеличить длину
      if(StructLen>1)ArrayResize(lots,StructLen);
      //Записать данные в структуру
      lots[StructLen-1].symbol=OrderSymbol();
      lots[StructLen-1].lots=OrderLots();
      }
В итоге, в структуре будут символы и лоты. Длина структуры соответствует количеству ордеров и символов. Если нет ордеров длина структуры будет =1, а в ячейке с названием символа будет пусто.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
29.01.2015, 08:38
Аватар для Palesandr
Palesandr Palesandr вне форума Интересующийся
Регистрация: 19.03.2014 / Сообщений: 9
Поблагодарили 3 раз(а) / Репутация: 4
всем привет
помогите с кодом

ТП фиксированный, без СЛ, лот фиксированный

открывается сразу два ордера, бай и селл. если, к примеру, бай закрылся по тейку, то открывается новый бай-ордер. если снова закрылся бай по тейку, то снова открываем бай-ордер.

вот такая простая логика.

как реализовать в коде? как смотреть какой ордер закрылся (баевский или селловский)?

спасибо
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 15:53. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO