Ответ
 
Опции темы
Старый 24.04.2013, 16:34   #1221 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Зачем ты мене даёшь ссылку на документацию? Это у тебя индикатор?
Ну ты сам рассуди. Если ты считаешь от количества баров на графике, а смотришь, наверняка, на последние... Какое совпадение ты можешь увидеть...

Алексей, чё та меня занесло не туда.. Но ведь Bars и есть последний бар. Тока вот я индекс получал не тот, который хотел получить.. Мля. Я понял в чём косяк.

Сообщение от AlexeyVik Посмотреть сообщение
Дословный перевод с аглицкого твоей переменной тоже ни о чём не говорит. Это всего-лишь набор символов, а что в ней должно быть это только тебе известно. Но я не вижу чтобы этой переменной присваивалось какое-либо значение перед выводом её из функции.

Так это ж дефайн. Согласно значения основных слов и создал. Вот ответ на Ваш вопрос:

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

PHP код:
#define REQUIRED_SEQUENTIAL_MISS             -1              // Признак отсуствия заданного значения свечей одного типа вподряд
#define REQUIRED_SEQUENTIAL_BULL_CANDLE       0              // Признак наличия заданного значения бычьих свечей вподряд
#define REQUIRED_SEQUENTIAL_BEAR_CANDLE       1              // Признак наличия заданного значения медвежьих свечей вподряд 
[свернуть]

Последний раз редактировалось NSerega; 24.04.2013 в 20:45.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.04.2013, 16:44   #1222 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,253
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 348
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1272
Отправить сообщение для Ugar с помощью ICQ
Сообщение от hoz Посмотреть сообщение
Но ведь Bars и есть последний бар.
Нет, это количество баров. Последний бар, это Bars-1

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.04.2013, 16:56   #1223 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от Ugar Посмотреть сообщение
Нет, это количество баров. Последний бар, это Bars-1
Думал так, а в я спехе сказал не верно.


Тут такая ситуация. Я переписал функцию. Вот что есть:


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

PHP код:
int LastCandlesType()
{
   
int cnt;                            // Счётчик идущих друг за другом бычьих свечей
   
   
for (int i=i_AnyBarsToHistoryi>=1i--)
   {
      if ((
Close[i] - Open[i]) <= i_sizeOfCurrBar Point)    // Пропускаем все бары, размера меньше заданного внешним параметром
          
continue;
     
      if (
Close[i] > Open[i])                               // Если условие соблюдается, значит текущий бар направлен вверх
          
cnt++;
      if (
Close[i] < Open[i])
          
cnt 0;
      Print(
"i = "i"; cnt = "cnt);
   }
   if (
cnt == 5)                                            // Если 5 баров вподряд бычьи..
    
return (REQUIRED_SEQUENTIAL_BEAR_CANDLE);           //..Выходим из функции

[свернуть]



Вот принт:


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

PHP код:
2013.04.24 18:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M11up 0cnt 14
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M13up 0cnt 13
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M112up 0cnt 12
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M113up 0cnt 11
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M114up 0cnt 10
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M116up 0cnt 9
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M119up 0cnt 8
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M122up 0cnt 7
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M123up 0cnt 6
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M124up 0cnt 5
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M126up 0cnt 4
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M127up 0cnt 3
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M129up 0cnt 2
2013.04.24 18
:51:45    2012.04.20 00:02  Scalper_M1 EURUSD,M130up 0cnt 
[свернуть]



Там цикл по барам от индекса i_AnyBarsToHistory до последнего закрытого.Если появляется не бычий бар, счётчик должен обнулится, но что-то по принту видно, что он не обнуляется. Прибавляется и всё.В чём причина?

Последний раз редактировалось NSerega; 24.04.2013 в 20:45.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.04.2013, 17:25   #1224 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от hoz Посмотреть сообщение
Если появляется не бычий бар, счётчик должен обнулится, но что-то по принту видно, что он не обнуляется. Прибавляется и всё.В чём причина?
В том, что медвежий бар выкидывается первым условием и на cnt повлиять не может.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.04.2013, 18:07   #1225 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от qqmber Посмотреть сообщение
В том, что медвежий бар выкидывается первым условием и на cnt повлиять не может.

Как это не может? Допустим считаем от последнего закрытого бара. Есть бар бычий, дальше бычий, а потом медвежий.. значит счётчик обнулится должен. Ведь в таком случает условие соблюдается только то, где обнуление. (на том баре)
Вот переписал:


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

PHP код:
int LastCandlesType()
{
   
int cnt;                            // Счётчик идущих друг за другом бычьих свечей
   
   
for (int i=1i<=i_AnyBarsToHistoryi++)
   {
      if (
MathAbs(Close[i] - Open[i]) <= i_sizeOfCurrBar Point)    // Пропускаем все бары, размера меньше заданного внешним параметром
          
continue;
     
      if (
Close[i] > Open[i])                               // Если бар бычий,..
          
cnt++;                                            // Счётчику добавим 1
      
if (Close[i] < Open[i])                               // Если бар медвежий..
          
cnt 0;                                          // Счётчик обнуляем
      
if (== 1)
         Print(
"i = "i,"; cnt = "cnt);
   }
 
//  Print("cnt = ", cnt);
   
if (cnt == 5)                                            // Если 5 баров вподряд бычьи..
    
return (REQUIRED_SEQUENTIAL_BEAR_CANDLE);           //..Выходим из функции

[свернуть]



Меня одно интересует. Вот скрин, где видно, что бары идут периодически друг за другом:


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

[свернуть]



Я запринтовал канкретно последний закрытый бар. Вот что выводит:


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

PHP код:
2013.04.24 20:14:54    2012.04.20 00:17  Scalper_M1 EURUSD,M11cnt 1
2013.04.24 20
:14:48    2012.04.20 00:16  Scalper_M1 EURUSD,M11cnt 1
2013.04.24 20
:14:45    2012.04.20 00:15  Scalper_M1 EURUSD,M11cnt 1
2013.04.24 20
:14:44    2012.04.20 00:14  Scalper_M1 EURUSD,M11cnt 1
2013.04.24 20
:14:36    2012.04.20 00:11  Scalper_M1 EURUSD,M11cnt 0
2013.04.24 20
:14:13    2012.04.20 00:04  Scalper_M1 EURUSD,M11cnt 1
2013.04.24 20
:13:56    2012.04.20 00:01  Scalper_M1 EURUSD,M11cnt 
[свернуть]



Тут типа максимально 1 бар был последовательный. А по факту видно, что вон последние 4 бычьих, например. Почему не так показывает счётчик cnt ?

Последний раз редактировалось NSerega; 24.04.2013 в 20:46.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.04.2013, 18:32   #1226 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Логику я чутка понял. Нужно смотреть если циклю с последнего закрытого, на бар с индексом не 1, а дальше.. Тока вот как тут лучше поступить?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.04.2013, 18:49   #1227 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,520
Репутация: 3644
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,648 раз(а) в 1,469 сообщениях
Поинты: 2006
Удали условие где комментарий //Пропускаем все бары, размера меньше заданного
И поставь такое условие
if(Close[i] - Open[i] >= 5) cnt++;
Это будет точно бар бычий и больше заданного.
и if(Open[i] - Close[i] >= 5) cnt = 0;
А если попадается медвежий больше заданного, то счётчик обнуляем.

Последний раз редактировалось AlexeyVik; 24.04.2013 в 18:51.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
hoz (24.04.2013)
Старый 24.04.2013, 20:40   #1228 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Удали условие где комментарий //Пропускаем все бары, размера меньше заданного
И поставь такое условие
if(Close[i] - Open[i] >= 5) cnt++;
Это будет точно бар бычий и больше заданного.
и if(Open[i] - Close[i] >= 5) cnt = 0;
А если попадается медвежий больше заданного, то счётчик обнуляем.

Я думал над этим. В плане оптимизации кода, это верно..
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 05:04   #1229 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,520
Репутация: 3644
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,648 раз(а) в 1,469 сообщениях
Поинты: 2006
Сообщение от hoz Посмотреть сообщение
Я думал над этим. В плане оптимизации кода, это верно..
А что-ж не сделал? Ты считаешь что сначала надо написать как попало, а потом заниматься оптимизацией кода?
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 09:03   #1230 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Вообще-то да. Но, на сколько я знаю, обычно полный рефакторинг кода делается в процессе или даже уже когда код написан. Хотя смотря, конечно, какой. Тут в принципе очевидно, значит лучше сразу.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 10:28   #1231 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,520
Репутация: 3644
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,648 раз(а) в 1,469 сообщениях
Поинты: 2006
Вот такой подход и приводит к таким вопросам.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 14:13   #1232 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Вот такой подход и приводит к таким вопросам.

В принципе да. Но это от недостатка опыта. И не стандартных ситуаций.
Вот смотрите. Щяс я решил придать данной функции универсальный вид. Пока что не совсем всё додумал, но те признаки, которые есть, хочу чтоб работали в 2 режимах.

1. В режиме, когда основной тренд вниз.
2. В режиме, когда основной тренд вверх.

Вот что я написал:

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

PHP код:
int LastCandlesType(int trand)
{
   
int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками
   
   
if (trand == up)
       
li_cmd = -1;
   if (
trand == down)
       
li_cmd 1;

   for (
int i=i_AnyBarsToHistoryi>=1i--)
   {
      if (
li_cmd * (Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar pt)              // Если бар соответствует требуемым признакам..
          
cnt++;                                                                     // .. прибавим 1 к счётчику

      
if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          
cnt 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   
}

   if (
cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    
return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции

[свернуть]


Переменная li_cmd нужна для того, чтоб если другой режим, т.е. тренд основной в другую сторону, то есс-но если вычитая из цены закрытия цену открытия всё-равно было значение положительное.
Я так понимаю, что нужно как-то назначить переменные для close[i] и open[i] ? Хотя это уже таймсерия, а значит - массив..
В общем, как тут сразу думать и сразу писать оптимально код, дабы не расписывать тоже самое для второго и, возможно, третьего режима для меня вопрос.
На данный момент код работает только для режима trand == down

Как можно сделать так, чтоб это функция была универсальной?

Последний раз редактировалось NSerega; 25.04.2013 в 18:08.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 14:35   #1233 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,520
Репутация: 3644
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,648 раз(а) в 1,469 сообщениях
Поинты: 2006
Как-же ты любишь создавать себе препятствия и их преодолевать...
Задачка ведь самая простая.

Весь код писать не буду, только условия

if(Close[i] - Open[i] >= 5) // если свеча бычья и тело больше заданного
{
cnt_Up++; // счётчик бычьих баров увеличиваем на 1
cnt_Dn = 0; // и обнуляем счётчик медвежьих баров
// Здесь можно добавить if(cnt_Up == 5) return(cnt_Up);
}
// Можно добавить else
if(Open[i] - Close[i] >= 5) // если свеча медвежья и тело больше заданного
{
cnt_Up = 0; // обнуляем счётчик бычьих баров
cnt_Dn++; // а счётчик медвежьих баров увеличиваем на 1
// Здесь можно добавить if(cnt_Dn == 5) return(cnt_Dn);
}

Всё!!!
А ты вставляешь какие-то флаги, пропуск баров меньше заданного и всякую другую несусветицу...
Я надеюсь ты сам вместо цифры 5 вставишь свои значения или переменные.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 14:48   #1234 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
Как-же ты любишь создавать себе препятствия и их преодолевать...
Задачка ведь самая простая.

Весь код писать не буду, только условия

if(Close[i] - Open[i] >= 5) // если свеча бычья и тело больше заданного
{
cnt_Up++; // счётчик бычьих баров увеличиваем на 1
cnt_Dn = 0; // и обнуляем счётчик медвежьих баров
// Здесь можно добавить if(cnt_Up == 5) return(cnt_Up);
}
// Можно добавить else
if(Open[i] - Close[i] >= 5) // если свеча медвежья и тело больше заданного
{
cnt_Up = 0; // обнуляем счётчик бычьих баров
cnt_Dn++; // а счётчик медвежьих баров увеличиваем на 1
// Здесь можно добавить if(cnt_Dn == 5) return(cnt_Dn);
}

Всё!!!
А ты вставляешь какие-то флаги, пропуск баров меньше заданного и всякую другую несусветицу...
Я надеюсь ты сам вместо цифры 5 вставишь свои значения или переменные.
Ну так у Вас то что я и говорил. Это тоже самое расписать для каждого if..
Это не есть универсальность.
Неужели это единственный вариант?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 14:50   #1235 (permalink)
Активный участник
 
Аватар для smartmans
 
Регистрация: 07.09.2012
Адрес: Москва
Сообщений: 119
Репутация: 82
smartmans
Сказал(а) спасибо: 354
Поблагодарили 81 раз(а) в 45 сообщениях
Поинты: 62
Сообщение от smartmans Посмотреть сообщение
Приветствую.
Есть индикатор X, обновляется только при смене таймфрейма или при перезапуске терминала.
Подскажите, что нужно вставить, чтобы обновлялся (перестраивался) в необходимое время терминала, скажем 00:00?
То есть не каждый бар/тик, а только в назначенное время.
Сообщение от strannik-ps Посмотреть сообщение
#include <WinUser32.mqh> в шапку индикатора

Попробуйте такую функцию пропишите после функции работы по времени.
PHP код:
  int hwnd =WindowHandle(Symbol(),Period());
     if(
hwnd != && (time==|| TimeCurrent()-time>10)) 
       { 
         
PostMessageA(hwndWM_COMMAND333240); 
         
time=TimeCurrent();
       } 
Увы не сработало по наступлению 00:00. только перезапуск.

А как попробовать?,чтобы по типу:

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

PHP код:
extern int hour00;
extern int minutes 00;
...
    if(
Таймкуррент  >= hour+minutes>=рефреш (обновление/перестроение) )|| 
[свернуть]
smartmans вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 15:07   #1236 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,520
Репутация: 3644
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,648 раз(а) в 1,469 сообщениях
Поинты: 2006
Сообщение от hoz Посмотреть сообщение
Ну так у Вас то что я и говорил. Это тоже самое расписать для каждого if..
Это не есть универсальность.
Неужели это единственный вариант?
Это совсем не то, что написал ты.
Сначала было условие, что бары меньше заданного игнорируются не зависимо от направления. Потом ты ставишь условие

if (Close[i] < Open[i]) // Если бар, не соответствует основному признаку.. (не зависимо от величины тела свечи)
cnt = 0; // .. счётчик обнуляем

и какие могут быть ещё условия? Какую универсальность ты хочешь придумать?

AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 15:35   #1237 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Сообщение от AlexeyVik Посмотреть сообщение
[COLOR=Black]и какие могут быть ещё условия? Какую универсальность ты хочешь придумать?
Например, вот моя функция перевода в безубыток:

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Перенос стопа в б.у.                                                                |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
// функция учёта ордеров для модификации
  
double priceBU;
  for (
int i OrdersTotal() - 1>= 0i--)
    {
       if (!
OrderSelect (iSELECT_BY_POSMODE_TRADES)) continue;
//------------------------------------------------------------------------------------------------------------------------------- 
       
if (OrderSymbol() != Symbol()) continue;
       if (
i_myMagic != -1) if (OrderMagicNumber() != i_myMagic) continue;
       if (
OrderType() > 1) continue;
       
       
RefreshRates();
        
       if (
OrderType() == OP_BUY)
       {
         
double Price Bidint li_cmd 1;
       }
       else
       {
         
li_cmd = -1Price Ask;
       }
       
// функция модификации ордера в безубыток
       
if (li_cmd * (Price OrderOpenPrice()) >= i_triggerForBU*pt)
       {
           
priceBU NormalizeDouble(OrderOpenPrice() + li_cmd * (i_PreservedProfit*pt), Digits);
           if (
NormalizeDouble(OrderStopLoss() - priceBUDigits) != 0.0)
           {
               if (!
OrderModify (OrderTicket(), OrderOpenPrice(), priceBUOrderTakeProfit(), 0CLR_NONE))
               {
                   Print (
"Ошибка модификации ордера "OrderType(), " - "GetLastError());
               }
               
               
Comment ("Ордер успешно переведён в безубыток");
               Print (
"Ордер успешно переведён в безубыток");
           }
       }
    }

[свернуть]


Видите, как тут универсально всё реализовано? Нет повторений тех же действий. Думал, что и тут можно что-то ещё придумать. Даже интересно..
Просто тут в цикле массив, потому и задумался я. А если б там не было цикла, то было бы просто всё..

Последний раз редактировалось NSerega; 25.04.2013 в 18:09.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 15:55   #1238 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,520
Репутация: 3644
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,648 раз(а) в 1,469 сообщениях
Поинты: 2006
Сообщение от hoz Посмотреть сообщение
Например, вот моя функция перевода в безубыток:

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

PHP код:
//+-------------------------------------------------------------------------------------+
//| Перенос стопа в б.у.                                                                |
//+-------------------------------------------------------------------------------------+

       
if (!OrderSelect (iSELECT_BY_POSMODE_TRADES)) continue;
//------------------------------------------------------------------------------------------------------------------------------- 
       
if (OrderSymbol() != Symbol()) continue;
       if (
i_myMagic != -1) if (OrderMagicNumber() != i_myMagic) continue;
       if (
OrderType() > 1) continue; 
[свернуть]
Видите, как тут универсально всё реализовано?
Это ты называешь универсально???
Всё что я оставил из твоего кода можно заменить одной строкой
if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() < 2)
{
}
Это будет эффективней и быстрей выполняться.

Последний раз редактировалось NSerega; 25.04.2013 в 18:09.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 25.04.2013, 16:49   #1239 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от hoz Посмотреть сообщение
Например, вот моя функция перевода в безубыток:
Видите, как тут универсально всё реализовано? Нет повторений тех же действий.
Вижу. Проходил этот этап.
На следующем витке познаний вы обнаружите, что сопровождение коротких и длинных позиций может сильно отличаться. И работа в бычьем и медвежьем тренде может использовать разные алгоритмы. Тогда придется универсальность ликвидировать.
qqmber вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
hoz (25.04.2013)
Старый 25.04.2013, 18:07   #1240 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
В общем-то я пришёл к выводу, что так будет само адекватно.

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

PHP код:
int LastCandlesType(int DirectionMA)
{
   
int cnt;                                                                            // Счётчик идущих друг за другом свечей с..
                                                                                       // .. требуемыми признаками
   
for (int i=i_AnyBarsToHistoryi>=1i--)
   {
      if (
DirectionMA == CROSS_UP)
      {
         if ((
Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar pt)              // Если бар соответствует требуемым признакам..
             
cnt++;                                                                     // .. прибавим 1 к счётчику

         
if ((Close[i] - Open[i]) >= i_sizeOfTrandBar pt)                             // Если бар, не соответствует основному признаку..
             
cnt 0;                                                                   // .. счётчик обнуляем
      
         
if (== 1)
            Print(
" DirectionMA "DirectionMA"; i = "i"; Open[i] - Close[i] = "Open[i] - Close[i], "; cnt = "cnt);

         if (
cnt == i_sequentBarscСount)                                                   // Если 5 баров вподряд бычьи..
             
return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         // .. Выходим из функции
      
}

      if (
DirectionMA == CROSS_DN)
      {
         if ((
Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar pt)              // Если бар соответствует требуемым признакам..
             
cnt++;                                                                     // .. прибавим 1 к счётчику

         
if ((Open[i] - Close[i]) >= i_sizeOfTrandBar pt)                             // Если бар, не соответствует основному признаку..
             
cnt 0;                                                                   // .. счётчик обнуляем
     
         
if (== 1)
            Print(
" DirectionMA "DirectionMA"; i = "i"; Close[i] - Open[i] = "Close[i] - Open[i], "; cnt = "cnt);

         if (
cnt == i_sequentBarscСount)                                                   // Если 5 баров вподряд бычьи..
             
return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         // .. Выходим из функции
      
}
   }

[свернуть]
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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