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

В Comment() выводите пробегая в цикле по массиву series.
Тут все просто. Почему такой вопрос вообще возник? ))
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 12:06   #3262 (permalink)
Местный знаток
 
Аватар для gince
 
Регистрация: 09.09.2008
Адрес: Литва
Сообщений: 396
Репутация: 733
gince - gince - gince - gince - gince - gince - gince -
Сказал(а) спасибо: 178
Поблагодарили 733 раз(а) в 189 сообщениях
Поинты: 192
Отправить сообщение для gince с помощью Skype™
Сообщение от Andy200577 Посмотреть сообщение
Я видел в одном советнике, что во входных параметрах есть строчки, которые нельзя менять, они описывают следующие за этой строкой параметры, потом опять строчка описания и опять параметры. Например "Параметры индикатора стохастик", пос этого идет например K = 5, D = 3, Z =3. Вот как сделать, чтобы строка "Параметры индикатора стохастик" не подлежала изменениям и была серым цветом выделена?
input string stoch="opisaninie stochastika";

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас
gince вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (05.12.2014)
Старый 05.12.2014, 14:13   #3263 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547
Сообщение от Ugar Посмотреть сообщение
....Взять готовую функцию безубытка. Разместить её за пределами функции 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.
Milord вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 14:23   #3264 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Будет.
Но если вы вызываете ее из функции безубытка, значит вы подсчитываете БУ сетки или что-то подобное.
На Ваше месте я бы получил все необходимые данные до, а потом их применял.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milord (08.12.2014)
Старый 05.12.2014, 15:00   #3265 (permalink)
Новичок форума
 
Аватар для max020780
 
Регистрация: 22.12.2009
Сообщений: 44
Репутация: 11
max020780
Сказал(а) спасибо: 6
Поблагодарили 12 раз(а) в 7 сообщениях
Поинты: 30
Сообщение от matro3 Посмотреть сообщение
В 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]));
   }

max020780 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 15:11   #3266 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от max020780 Посмотреть сообщение
пишу вот так в столбик не выводит да и выдает ошибку что выход за пределы массива как написать правильно чтоб длина массива увеличивалась в зависимости от количества серий то есть если было семь серий то и размер массива был равен количеству серий и соответственно в Comment() тоже добавлялись строки
В цикле формируй строку в переменную глобального уровня и её суй в Comment();
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 15:45   #3267 (permalink)
Элитный участник
 
Аватар для Ladzius
 
Регистрация: 28.11.2013
Адрес: Mars
Сообщений: 1,114
Репутация: 1439
Ladzius Ladzius Ladzius Ladzius Ladzius Ladzius Ladzius Ladzius Ladzius Ladzius
Сказал(а) спасибо: 2,275
Поблагодарили 1,431 раз(а) в 694 сообщениях
Поинты: 157
Большое просьба уговарить пациента болтать спасибо
Вложения:
Тип файла: ex4 RenkoBot_EA_only_for_tester.ex4 (386.5 Кб, 3 просмотров)
Ladzius вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 15:52   #3268 (permalink)
Новичок форума
 
Аватар для max020780
 
Регистрация: 22.12.2009
Сообщений: 44
Репутация: 11
max020780
Сказал(а) спасибо: 6
Поблагодарили 12 раз(а) в 7 сообщениях
Поинты: 30
Сообщение от AlexeyVik Посмотреть сообщение
В цикле формируй строку в переменную глобального уровня и её суй в Comment();
Я конечно дико извиняюсь в программировании не селен поэтому можно помочь куском кода как Ув. matro3 а не словами как вы
max020780 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 16:19   #3269 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от max020780 Посмотреть сообщение
Я конечно дико извиняюсь в программировании не селен поэтому можно помочь куском кода как Ув. 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);
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.12.2014, 17:14   #3270 (permalink)
Новичок форума
 
Аватар для max020780
 
Регистрация: 22.12.2009
Сообщений: 44
Репутация: 11
max020780
Сказал(а) спасибо: 6
Поблагодарили 12 раз(а) в 7 сообщениях
Поинты: 30
Сообщение от AlexeyVik Посмотреть сообщение
Я не сторонник таких подсказок. Можно воспользоваться шпаргалкой, а можно понять происходящее и больше не задавать похожих вопросов.
Ну ты сам-то прочти что будет в комментарии при очередной итерации цикла
Код:
   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);

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

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от planod Посмотреть сообщение
Подскажите как реализовать следующую ситуацию: несколько советников считывают объем лота из текстового файла и периодически советник записывает туда новое значение.
Может легче через GlabalVariableSet() GlabalVariableChek()?
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
planod (07.12.2014)
Старый 06.12.2014, 17:03   #3273 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
PHP код:
comm "";
for(
0ki++)
   
comm += StringConcatenate("Серия из " " ордеров = "seriess[i+1], "\n");

Comment(comm); 
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (06.12.2014), max020780 (06.12.2014)
Старый 11.12.2014, 15:03   #3274 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547

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


Вопрос такой как сделать, чтобы при наступлении условия, советник не открывал кучу ордеров один на одном, а только 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.
Milord вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 11.12.2014, 16:00   #3275 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,648
Репутация: 8548
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,544 раз(а) в 1,562 сообщениях
Поинты: 802
Сообщение от Milord Посмотреть сообщение
Вопрос такой как сделать, чтобы при наступлении условия, советник не открывал кучу ордеров один на одном, а только 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].
Можно запомнить цену последнего открытого ордера и уже через заданный шаг открывать следующий ордер - вариант сетки.
Вообщем, как то так, может Гуру предложат еще варианты...
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
4 пользователя(ей) сказали cпасибо:
eevviill (11.12.2014), Gnn-life (12.12.2014), Milord (11.12.2014), сomputer_dealer (12.12.2014)
Старый 12.12.2014, 15:53   #3276 (permalink)
Местный знаток
 
Аватар для Gnn-life
 
Регистрация: 09.04.2012
Адрес: Питер
Сообщений: 470
Репутация: 982
Gnn-life - Gnn-life - Gnn-life - Gnn-life - Gnn-life - Gnn-life - Gnn-life - Gnn-life -
Сказал(а) спасибо: 552
Поблагодарили 982 раз(а) в 298 сообщениях
Поинты: 102
Сообщение от mobidik Посмотреть сообщение
Тут зависит еще от поставленных целей, если нужно только один ордер на свечу, тогда делать проверку на новый бар. При этом могут 5 ордеров открыться подряд, на открытии каждого бара, т.е., открылся ордер - установить: TimeBar=Time[0]. Тогда в условие открытия ордера добавить проверку на новый бар: TimeBar!=Time[0].
Можно запомнить цену последнего открытого ордера и уже через заданный шаг открывать следующий ордер - вариант сетки.
Вообщем, как то так, может Гуру предложат еще варианты...
а есть ли такая возможность открывать следующий ордер по сигналу, но не ранее заданного шага? Как это прописать в коде?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Gnn-life вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 12.12.2014, 20:41   #3277 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,648
Репутация: 8548
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,544 раз(а) в 1,562 сообщениях
Поинты: 802
Сообщение от Gnn-life Посмотреть сообщение
а есть ли такая возможность открывать следующий ордер по сигналу, но не ранее заданного шага? Как это прописать в коде?
Как вариант, я бы сделал так:

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

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

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

    
ticket=OrderSend(Symbol(),OP_BUY,Lots ... // открываем ордер ...
    
if(ticket>0возможен бай 0;            // если ордер открылся, присваиваем переменной "возможен бай" - 0.
  
}
 ... 
[свернуть]
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Gnn-life (13.12.2014), Milord (12.12.2014)
Старый 12.12.2014, 22:21   #3278 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547
Сообщение от mobidik Посмотреть сообщение
Как вариант, я бы сделал так:

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

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

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

    
ticket=OrderSend(Symbol(),OP_BUY,Lots ... // открываем ордер ...
    
if(ticket>0возможен бай 0;            // если ордер открылся, присваиваем переменной "возможен бай" - 0.
  
}
 ... 
[свернуть]
а можно ли как то закодить логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок
Миниатюры:
Нажмите на изображение для увеличения
Название: forex01.JPG
Просмотров: 5
Размер:	10.0 Кб
ID:	188124  

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Milord вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 12.12.2014, 22:43   #3279 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,648
Репутация: 8548
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,544 раз(а) в 1,562 сообщениях
Поинты: 802
Сообщение от Milord Посмотреть сообщение
а можно ли как то закодить логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок
Сигнал будет когда выполнится условие на новом тике, если условие не было верным на предыдущем тике. Т.е., как только А>B сова дает запрос на открытие ордера (если нет никаких слипов и таймеров), а тут уже вступает в работу проскальзывание, пинг (провайдер интернета), козни брокера (время исполнения) и т.д...
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 12.12.2014, 23:03   #3280 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547
Сообщение от mobidik Посмотреть сообщение
Сигнал будет когда выполнится условие на новом тике, если условие не было верным на предыдущем тике. Т.е., как только А>B сова дает запрос на открытие ордера (если нет никаких слипов и таймеров), а тут уже вступает в работу проскальзывание, пинг (провайдер интернета), козни брокера (время исполнения) и т.д...
вы не поняли мой вопрос, предложенный вами метод с дистанцией или выше открытием на барах мне не подойдет, так как если условие сигнала A>B, будет на новом баре, то снова ордер откроется(чего мне и не нужно), или ваша дистанция может быть тоже мало эффективной, если сигнал будет присутствовать при этом, ордер снова откроется...а мне не нужно его снова открывать при первом сигнале, у меня логика работы - 1 сигнал - 1 ордер, и он должен открываться по переднему фронту сигнала! и вопрос - как это написать в коде???

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

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


Опции темы

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

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



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


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