Ответить
05.12.2014, 07:43
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
countOrders() - функция подсчета ордеров.
В ней бы я считал ордера с фильтрами по символу, магику и т.д.
Если все равно что он будет считать чужие ордера, то OrdersTotal()

В Comment() выводите пробегая в цикле по массиву series.
Тут все просто. Почему такой вопрос вообще возник? ))
05.12.2014, 12:06
Аватар для gince
gince gince на форуме Местный знаток
Регистрация: 09.09.2008 / Адрес: Литва / Сообщений: 449
Поблагодарили 812 раз(а) / Репутация: 812
  • Отправить сообщение для gince с помощью Skype™
Я видел в одном советнике, что во входных параметрах есть строчки, которые нельзя менять, они описывают следующие за этой строкой параметры, потом опять строчка описания и опять параметры. Например "Параметры индикатора стохастик", пос этого идет например K = 5, D = 3, Z =3. Вот как сделать, чтобы строка "Параметры индикатора стохастик" не подлежала изменениям и была серым цветом выделена?
input string stoch="opisaninie stochastika";
Гинтарас
05.12.2014, 14:13
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
....Взять готовую функцию безубытка. Разместить её за пределами функции start, вызвать её внутри функции start, как раз можно в начале.....
СПАСИБО за подсказку,1-ну функцию подключить получилось, вызов на нее например Function_A() пишу сразу после команды Start(), но мне еще нужно из самой функции сделать вызов на другую функцию Function_B(), будет ли правильно,как я написал ниже, как считаете???

PHP код:
int Start()
{

if(..
условие....) Function_A(); 

return(
0);
}
//-------------------------------------
void Function_A() 
{
if(...
условие......)
 {
  if(...
условие...)
   { 
   if(...
условие...) Function_B(); 
   }
 }
}
//--------------------------------------
void Function_B() 
{
if(...
условие...) 
   
}
//--------------------end-------------- 
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 05.12.2014 в 14:15.
05.12.2014, 14:23
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Будет.
Но если вы вызываете ее из функции безубытка, значит вы подсчитываете БУ сетки или что-то подобное.
На Ваше месте я бы получил все необходимые данные до, а потом их применял.
Milord 
05.12.2014, 15:00
Аватар для max020780
max020780 max020780 вне форума Новичок форума
Регистрация: 22.12.2009 / Сообщений: 50
Поблагодарили 12 раз(а) / Репутация: 11
В Comment() выводите пробегая в цикле по массиву series.
Тут все просто. Почему такой вопрос вообще возник? ))
пишу вот так в столбик не выводит да и выдает ошибку что выход за пределы массива как написать правильно чтоб длина массива увеличивалась в зависимости от количества серий то есть если было семь серий то и размер массива был равен количеству серий и соответственно в Comment() тоже добавлялись строки
PHP код:
ushort seriess[];

ushort series_current 0;
input int magic=345461;
int NumberOfPositions(string sy="" int mn=-1) {
  
int ik=OrdersTotal(), kp=0;

  if (
sy=="0"sy=Symbol();
  for (
i=0i<ki++) {
    if (
OrderSelect(iSELECT_BY_POSMODE_TRADES)) {
      if (
OrderSymbol()==sy || sy=="") {
        if (
OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if(
mn<0|| OrderMagicNumber()==magic)  kp++;
          }
        }
    }
  }
  return(
kp);
}
void OnTick()
{
int count NumberOfPositions(Symbol(),-1);
   if(
count == 0)
      
series_current 0;
   if(
series_current != count)
   {
      
series_current = (ushort)count;
      if(
count == 1)
         
seriess[0]++;
      if(
count 1)
      {
         
seriess[count-1]++;
         
seriess[count-2]--;
      }
   }
   
int i
   
int k=12;
   for(  
i=0i<=i++)
   {
   
Comment(StringFormat("Серия из  %d ордеров =  %d\n ",i,seriess[i+1]));
   }

05.12.2014, 15:11
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
пишу вот так в столбик не выводит да и выдает ошибку что выход за пределы массива как написать правильно чтоб длина массива увеличивалась в зависимости от количества серий то есть если было семь серий то и размер массива был равен количеству серий и соответственно в Comment() тоже добавлялись строки
В цикле формируй строку в переменную глобального уровня и её суй в Comment();
05.12.2014, 15:45
Аватар для Ladzius
Ladzius Ladzius вне форума Элитный участник
Регистрация: 28.11.2013 / Адрес: Lithuania / Сообщений: 1,251
Поблагодарили 1,650 раз(а) / Репутация: 1658
  • Отправить сообщение для Ladzius с помощью Skype™
Большое просьба уговарить пациента болтать спасибо
05.12.2014, 15:52
Аватар для max020780
max020780 max020780 вне форума Новичок форума
Регистрация: 22.12.2009 / Сообщений: 50
Поблагодарили 12 раз(а) / Репутация: 11
В цикле формируй строку в переменную глобального уровня и её суй в Comment();
Я конечно дико извиняюсь в программировании не селен поэтому можно помочь куском кода как Ув. matro3 а не словами как вы
05.12.2014, 16:19
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Я конечно дико извиняюсь в программировании не селен поэтому можно помочь куском кода как Ув. matro3 а не словами как вы
Я не сторонник таких подсказок. Можно воспользоваться шпаргалкой, а можно понять происходящее и больше не задавать похожих вопросов.
Ну ты сам-то прочти что будет в комментарии при очередной итерации цикла
Код:
   for(  i=0; i<=k ; i++)
   {
   Comment(StringFormat("Серия из  %d ордеров =  %d\n ",i,seriess[i+1]));
   }
Изменится только i и значение series[i+1] но то что было в предыдущей итерации будет потеряно.
Код:
string comm;

for(i = 0; i < k; i++)
comm = StringConcatenate(comm, i, series[i+1], "\n\r");

Comment(comm);
05.12.2014, 17:14
Аватар для max020780
max020780 max020780 вне форума Новичок форума
Регистрация: 22.12.2009 / Сообщений: 50
Поблагодарили 12 раз(а) / Репутация: 11
Я не сторонник таких подсказок. Можно воспользоваться шпаргалкой, а можно понять происходящее и больше не задавать похожих вопросов.
Ну ты сам-то прочти что будет в комментарии при очередной итерации цикла
Код:
   for(  i=0; i<=k ; i++)
   {
   Comment(StringFormat("Серия из  %d ордеров =  %d\n ",i,seriess[i+1]));
   }
Изменится только i и значение series[i+1] но то что было в предыдущей итерации будет потеряно.
Код:
string comm;

for(i = 0; i < k; i++)
comm = StringConcatenate(comm, i, series[i+1], "\n\r");

Comment(comm);
Спасибо , но вот другая проблема как правильно вписать туда текст пробую вот так и снова начинает выводить в одну строку
PHP код:
int i
   
int k=12;
   
string comm;
   
string comm1;

for(
0ki++){
comm StringConcatenate"Серия из "  );
comm1StringConcatenate"ордеров = ",seriess[i+1], "\n\r");

Comment(comm+comm1);

подправьте пожалуйста
06.12.2014, 12:03
Аватар для planod
planod planod вне форума Интересующийся
Регистрация: 24.12.2013 / Сообщений: 11
Поблагодарили 0 раз(а) / Репутация: 1
Подскажите как реализовать следующую ситуацию: несколько советников считывают объем лота из текстового файла и периодически советник записывает туда новое значение.
06.12.2014, 12:23
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,032 раз(а) / Репутация: 9032
  • Отправить сообщение для eevviill с помощью Skype™
Подскажите как реализовать следующую ситуацию: несколько советников считывают объем лота из текстового файла и периодически советник записывает туда новое значение.
Может легче через GlabalVariableSet() GlabalVariableChek()?
planod 
06.12.2014, 17:03
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
PHP код:
comm "";
for(
0ki++)
   
comm += StringConcatenate("Серия из " " ордеров = "seriess[i+1], "\n");

Comment(comm); 
11.12.2014, 15:03
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711

По умолчанию Профи - подскажите плиз что добавить в код???

Вопрос такой как сделать, чтобы при наступлении условия, советник не открывал кучу ордеров один на одном, а только 1-н,а то происходит следующее, при числе ордеров на счете разрешенном для открытия параметром MaxOrders=5,советник и открывает 5ть ордеров, но все в одной точке...как убрать такой "глюк"???
ниже кусок кода:

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(A>B)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

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

Последний раз редактировалось Milord; 11.12.2014 в 15:06.
11.12.2014, 16:00
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,879
Поблагодарили 9,599 раз(а) / Репутация: 9604
Вопрос такой как сделать, чтобы при наступлении условия, советник не открывал кучу ордеров один на одном, а только 1-н,а то происходит следующее, при числе ордеров на счете разрешенном для открытия параметром MaxOrders=5,советник и открывает 5ть ордеров, но все в одной точке...как убрать такой "глюк"???
ниже кусок кода:

PHP код:
extern int MaxOrders=5;

int start()
{
 if(
OrdersTotal() < MaxOrders)
  {
//---------------------

   
if(A>B)
    {
     
OrderSend(....);
    }

//---------------------
  
}
return(
0);

Тут зависит еще от поставленных целей, если нужно только один ордер на свечу, тогда делать проверку на новый бар. При этом могут 5 ордеров открыться подряд, на открытии каждого бара, т.е., открылся ордер - установить: TimeBar=Time[0]. Тогда в условие открытия ордера добавить проверку на новый бар: TimeBar!=Time[0].
Можно запомнить цену последнего открытого ордера и уже через заданный шаг открывать следующий ордер - вариант сетки.
Вообщем, как то так, может Гуру предложат еще варианты...
12.12.2014, 15:53
Аватар для Gnn-life
Gnn-life Gnn-life вне форума Элитный участник
Регистрация: 09.04.2012 / Адрес: Питер / Сообщений: 516
Поблагодарили 1,047 раз(а) / Репутация: 1047
Тут зависит еще от поставленных целей, если нужно только один ордер на свечу, тогда делать проверку на новый бар. При этом могут 5 ордеров открыться подряд, на открытии каждого бара, т.е., открылся ордер - установить: TimeBar=Time[0]. Тогда в условие открытия ордера добавить проверку на новый бар: TimeBar!=Time[0].
Можно запомнить цену последнего открытого ордера и уже через заданный шаг открывать следующий ордер - вариант сетки.
Вообщем, как то так, может Гуру предложат еще варианты...
а есть ли такая возможность открывать следующий ордер по сигналу, но не ранее заданного шага? Как это прописать в коде?
12.12.2014, 20:41
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,879
Поблагодарили 9,599 раз(а) / Репутация: 9604
а есть ли такая возможность открывать следующий ордер по сигналу, но не ранее заданного шага? Как это прописать в коде?
Как вариант, я бы сделал так:

Скрытый текст

PHP код:
int мин_дист 25;                            // минимальная дистанция между ордерами
int возможен бай;                             // переменная для бай
OrderOpenLast()                               // функция определения цены открытия последнего ордера

if(Ваше условие на байвозможен бай 1   ;  // есть выполнение условия на вход бай, приваиваем перем. "возможен бай" - 1
if(возможен бай == && Ask OrderOpenLast()>мин_дист// есть условие на бай и текущая цена больше за дистанцию, то
  

    
ticket=OrderSend(Symbol(),OP_BUY,Lots ... // открываем ордер ...
    
if(ticket>0возможен бай 0;            // если ордер открылся, присваиваем переменной "возможен бай" - 0.
  
}
 ... 
[свернуть]
12.12.2014, 22:21
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Как вариант, я бы сделал так:

Скрытый текст

PHP код:
int мин_дист 25;                            // минимальная дистанция между ордерами
int возможен бай;                             // переменная для бай
OrderOpenLast()                               // функция определения цены открытия последнего ордера

if(Ваше условие на байвозможен бай 1   ;  // есть выполнение условия на вход бай, приваиваем перем. "возможен бай" - 1
if(возможен бай == && Ask OrderOpenLast()>мин_дист// есть условие на бай и текущая цена больше за дистанцию, то
  

    
ticket=OrderSend(Symbol(),OP_BUY,Lots ... // открываем ордер ...
    
if(ticket>0возможен бай 0;            // если ордер открылся, присваиваем переменной "возможен бай" - 0.
  
}
 ... 
[свернуть]
а можно ли как то закодить логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
12.12.2014, 22:43
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,879
Поблагодарили 9,599 раз(а) / Репутация: 9604
а можно ли как то закодить логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок
Сигнал будет когда выполнится условие на новом тике, если условие не было верным на предыдущем тике. Т.е., как только А>B сова дает запрос на открытие ордера (если нет никаких слипов и таймеров), а тут уже вступает в работу проскальзывание, пинг (провайдер интернета), козни брокера (время исполнения) и т.д...
12.12.2014, 23:03
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 603
Поблагодарили 708 раз(а) / Репутация: 711
Сигнал будет когда выполнится условие на новом тике, если условие не было верным на предыдущем тике. Т.е., как только А>B сова дает запрос на открытие ордера (если нет никаких слипов и таймеров), а тут уже вступает в работу проскальзывание, пинг (провайдер интернета), козни брокера (время исполнения) и т.д...
вы не поняли мой вопрос, предложенный вами метод с дистанцией или выше открытием на барах мне не подойдет, так как если условие сигнала A>B, будет на новом баре, то снова ордер откроется(чего мне и не нужно), или ваша дистанция может быть тоже мало эффективной, если сигнал будет присутствовать при этом, ордер снова откроется...а мне не нужно его снова открывать при первом сигнале, у меня логика работы - 1 сигнал - 1 ордер, и он должен открываться по переднему фронту сигнала! и вопрос - как это написать в коде???
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Ответить

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


Опции темы

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

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



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


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