Ответ
 
Опции темы
Старый 04.02.2015, 10:49   #3521 (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
Сообщение от Picasso Посмотреть сообщение
Немного визуализирую вопрос, может кто поможет.
На обычном макдаке, линия пересекла 0, стрелка постоянно показывает вверх и наоборот, при пересечении вниз.

Вложение 195015

Вложение 195016
Берёшь показания индикатора на первом и втором баре и сравниваешь.
Если на 2 меньше/равно 0 а на 1 больше 0 то пересечение снизу вверх.
Соответственно наоборот
если на 2 больше/равно 0 а на 1 меньше 0 то пересечение сверху вниз.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Picasso (04.02.2015)
Старый 04.02.2015, 10:57   #3522 (permalink)
Местный знаток
 
Аватар для Picasso
 
Регистрация: 17.04.2013
Адрес: город-герой ОДЕССА ★
Сообщений: 340
Репутация: 595
Picasso - Picasso - Picasso - Picasso - Picasso - Picasso -
Сказал(а) спасибо: 341
Поблагодарили 594 раз(а) в 145 сообщениях
Поинты: 139
Отправить сообщение для Picasso с помощью Skype™
Сообщение от AlexeyVik Посмотреть сообщение
Берёшь показания индикатора на первом и втором баре и сравниваешь.
Если на 2 меньше/равно 0 а на 1 больше 0 то пересечение снизу вверх.
Соответственно наоборот
если на 2 больше/равно 0 а на 1 меньше 0 то пересечение сверху вниз.
С этим понятно. Если условие выполнено, то переключаем триггер и держим до следующего выполнения.
А вот как вывести стрелку в подвал? Какой функцией?
Picasso на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 04.02.2015, 11:37   #3523 (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
Сообщение от Picasso Посмотреть сообщение
С этим понятно. Если условие выполнено, то переключаем триггер и держим до следующего выполнения.
А вот как вывести стрелку в подвал? Какой функцией?
Надо добавить ещё 2 буфера и при выполнении условия одному из этих буферов присвоить значение индикатора.

Код:
#property indicator_buffers 4 // было 2
// Добавить цвет значков

int OnInit() 
{

   SetIndexStyle(0, ); // Это было
   SetIndexStyle(1, ); // и это оже

   SetIndexStyle(2, DRAW_ARROW); 
   SetIndexStyle(3, DRAW_ARROW); 
   SetIndexArrow(2, ); // Сюда поставить код значка
   SetIndexArrow(3, ); // сюда тоже

   return(0); 
}//******************************************************************|
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Picasso (04.02.2015)
Старый 04.02.2015, 15:43   #3524 (permalink)
Активный участник
 
Аватар для sstyle
 
Регистрация: 06.01.2015
Сообщений: 59
Репутация: 36
sstyle
Сказал(а) спасибо: 5
Поблагодарили 35 раз(а) в 14 сообщениях
Поинты: 60
Помогите пожалуйста с такой проблемой. Написал индикатор. Считает в реальном времени и пишет в буфер. Но спустя какое-то количество свечей, вся информация исчезает из индикатора, как будто буфер почистили. Как такое может быть?

И еще вопрос. как записать в файл 8 строк буфера и потом читать из него, чтобы история подгружалась?

Последний раз редактировалось sstyle; 04.02.2015 в 16:09.
sstyle вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.02.2015, 17:35   #3525 (permalink)
Активный участник
 
Аватар для viplert
 
Регистрация: 07.01.2014
Сообщений: 124
Репутация: 42
viplert
Сказал(а) спасибо: 14
Поблагодарили 41 раз(а) в 25 сообщениях
Поинты: 42
Всем привет, помогите написать кусок кода, а имено вирнуальный споплос. То есть в какой то момент, скрипт определял прошла ли цена выше стоплоса или равно и закрывал позицию.
viplert вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.02.2015, 19:56   #3526 (permalink)
Активный участник
 
Аватар для viplert
 
Регистрация: 07.01.2014
Сообщений: 124
Репутация: 42
viplert
Сказал(а) спасибо: 14
Поблагодарили 41 раз(а) в 25 сообщениях
Поинты: 42
Написал функцию, проверьте пожалуйста её адэкватность

Код HTML:
// ФУНКЦИЯ ВИРТУАЛЬНОГО СТОПЛОСА
void VirtualStopLos()
{
   if (StopLos != 0) {  
   
         // Текущая цена
         double Price = (Ask+Bid)/2;

         for(int i = OrdersTotal(); i >= 0; i--)
         {    
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            if(OrderSymbol() == Symbol()) 
            {
               if(OrderType() == OP_BUY)
               {
                  // Покупка условия выхода
                  double SL = NormalizeDouble(OrderOpenPrice() - StopLos * Point, Digits); // Цена стоплос
                  if(Price <= SL)
                  {
                     // Выход из позиции
                     OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Violet); // Закрываем
                  }
                   
               }
               else
               if(OrderType() == OP_SELL)
               {
                  // Продажа  условия выхода
                  double SL = NormalizeDouble(OrderOpenPrice() + StopLos * Point, Digits); // Цена стоплос
                  if(Price >= SL)
                  {
                     // Выход из позиции
                     OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Violet); // Закрываем
                  }
                  
               }
            }
        }
   }
}

Последний раз редактировалось viplert; 04.02.2015 в 20:01.
viplert вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.02.2015, 06:20   #3527 (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
Сообщение от viplert Посмотреть сообщение
Написал функцию, проверьте пожалуйста её адэкватность

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

Код HTML:
// ФУНКЦИЯ ВИРТУАЛЬНОГО СТОПЛОСА
void VirtualStopLos()
{
   if (StopLos != 0) {  
   
         // Текущая цена
         double Price = (Ask+Bid)/2;

         for(int i = OrdersTotal(); i >= 0; i--)
         {    
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            if(OrderSymbol() == Symbol()) 
            {
               if(OrderType() == OP_BUY)
               {
                  // Покупка условия выхода
                  double SL = NormalizeDouble(OrderOpenPrice() - StopLos * Point, Digits); // Цена стоплос
                  if(Price <= SL)
                  {
                     // Выход из позиции
                     OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Violet); // Закрываем
                  }
                   
               }
               else
               if(OrderType() == OP_SELL)
               {
                  // Продажа  условия выхода
                  double SL = NormalizeDouble(OrderOpenPrice() + StopLos * Point, Digits); // Цена стоплос
                  if(Price >= SL)
                  {
                     // Выход из позиции
                     OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Violet); // Закрываем
                  }
                  
               }
            }
        }
   }
}
[свернуть]
Вот так всегда и получается. Ожидание помощи и самостоятельное написание заняло всего лишь 2,5 часа.

В принципе написано достойно. Только пара замечаний, проверка магика всё-же нужна и нужна проверка выполнения приказа OrderClose(). Ну и набравшись опыта перепишешь эту функцию ещё короче.
Недокументированная фича mql4
Если в качестве цены закрытия написать OrderClosePrice() то без ошибок закроется и Buy и Sell ордер.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.02.2015, 18:30   #3528 (permalink)
Активный участник
 
Аватар для sstyle
 
Регистрация: 06.01.2015
Сообщений: 59
Репутация: 36
sstyle
Сказал(а) спасибо: 5
Поблагодарили 35 раз(а) в 14 сообщениях
Поинты: 60
Алексей, посмотрите мой вопрос пожалуйста
sstyle вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.02.2015, 18:51   #3529 (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
Сообщение от sstyle Посмотреть сообщение
Алексей, посмотрите мой вопрос пожалуйста
Я ещё дважды перечитал твой вопрос, но так и не понял первую его часть. А вторую часть по ненадобности не изучал в таких подробностях чтобы давать советы. Будет нужда, буду разбираться. Да и что такое
Цитата:
потом читать из него, чтобы история подгружалась?
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.02.2015, 20:17   #3530 (permalink)
Активный участник
 
Аватар для sstyle
 
Регистрация: 06.01.2015
Сообщений: 59
Репутация: 36
sstyle
Сказал(а) спасибо: 5
Поблагодарили 35 раз(а) в 14 сообщениях
Поинты: 60
Ок. запускаю индикатор, он начинает выводить гистограмму и сохраняет в буфер 8 массивов:

Код:
   SetIndexBuffer( 0, sum );    SetIndexLabel( 0, NULL );       SetIndexStyle( 0, DRAW_HISTOGRAM );
   SetIndexBuffer( 1, m15 );    SetIndexLabel( 1, NULL );       SetIndexStyle( 1, DRAW_HISTOGRAM );
   SetIndexBuffer( 2, m5 );    SetIndexLabel( 2, NULL );       SetIndexStyle( 2, DRAW_HISTOGRAM );
   SetIndexBuffer( 3, tek );    SetIndexLabel( 3, NULL );       SetIndexStyle( 3, DRAW_HISTOGRAM );
   SetIndexBuffer( 4, gadblSlope );  SetIndexLabel( 4, "Indicator" );    SetIndexStyle( 4, DRAW_NONE );
   SetIndexBuffer( 5, gadblUp1 );    SetIndexLabel( 5, NULL );       SetIndexStyle( 5, DRAW_NONE );
   SetIndexBuffer( 6, gadblUp2 );    SetIndexLabel( 6, NULL );       SetIndexStyle( 6, DRAW_NONE );
   SetIndexBuffer( 7, gadblDn1 );    SetIndexLabel( 7, NULL );       SetIndexStyle( 7, DRAW_NONE );
Спустя какое-то количество свечей (максимум 120, на глаз), все гистограммы исчезают. как будто перезапустился индикатор или другими словами буфер очищается.

Последний раз редактировалось sstyle; 05.02.2015 в 20:21.
sstyle вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.02.2015, 21:31   #3531 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Этот код никакой ясности не внес.
Пробуйте через Print() выводить что-то в журнал. В каком-то месте проскакивает ноль, я так понимаю...
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.02.2015, 05:41   #3532 (permalink)
Местный знаток
 
Аватар для Vyacheslav88
 
Регистрация: 30.01.2014
Сообщений: 278
Репутация: 983
Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 -
Сказал(а) спасибо: 424
Поблагодарили 982 раз(а) в 178 сообщениях
Поинты: 46
Всем привет. Подскажите что нужно такое прописать в индикаторе чтобы стрелки не перерисовывались. Например вот в этом индикаторе.
Вложения:
Тип файла: mq4 CANDLESTICK.mq4 (14.6 Кб, 8 просмотров)
Vyacheslav88 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 07.02.2015, 06:51   #3533 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547
Сообщение от Picasso Посмотреть сообщение
Немного визуализирую вопрос, может кто поможет.
На обычном макдаке, линия пересекла 0, стрелка постоянно показывает вверх и наоборот, при пересечении вниз.

Вложение 195015

Вложение 195016
для тех кто не силен в языке MQL4 - есть ветка по бесплатной доработке советников и индикаторов, вот тут:

Доработка ботов (советников, индикаторов) vol. 2

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Milord вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 07.02.2015, 06:54   #3534 (permalink)
Местный знаток
 
Аватар для Milord
 
Регистрация: 26.03.2011
Сообщений: 596
Репутация: 705
Milord - Milord - Milord - Milord - Milord - Milord - Milord -
Сказал(а) спасибо: 897
Поблагодарили 702 раз(а) в 192 сообщениях
Поинты: 547
Сообщение от Vyacheslav88 Посмотреть сообщение
Всем привет. Подскажите что нужно такое прописать в индикаторе чтобы стрелки не перерисовывались. Например вот в этом индикаторе.
любой индикатор можно сделать не перерисовывающимся, если он будет считать ТОЛЬКО от 1 Бара и дальше назад по времени...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Milord вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Vyacheslav88 (07.02.2015)
Старый 09.02.2015, 18:40   #3535 (permalink)
Интересующийся
 
Аватар для Tonyr
 
Регистрация: 18.08.2013
Сообщений: 7
Репутация: 1
Tonyr
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 10
Доброе время суток.
Подскажите что тут не верно.
Пытаюсь написать сову
С открытием отложенных ордеров в обратном направлении от последней открытой сделки.
Но что-то никак не соображу(

int start()
{
int total=OrdersTotal();
if(total<MaxOrders)
OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber ,0,CLR_NONE);
else
{
for (int i=0; i<OrdersTotal(); i++) // По всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующ.
{
int Total = OrdersTotal(); // TakeProfit ордера
double Price = OrderOpenPrice();
double Lots = OrderLots(); // Количество лотов
if (Total>1){
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,slippage,B id+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,CLR_NONE);
}
}
}
}

return;
}

заранее благодарен
Tonyr вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.02.2015, 04:09   #3536 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Я вообще не понял ничего ) Какая-то бессмыслица.

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

Код:
int start()
{
   int total=OrdersTotal(); 
   if(total<MaxOrders)
      OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber ,0,CLR_NONE);
   else
   {
      for (int i=0; i<OrdersTotal(); i++) // По всем ордерам
      {
         if(OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующ.
         { 
            int Total = OrdersTotal(); // TakeProfit ордера
            double Price = OrderOpenPrice(); 
            double Lots = OrderLots(); // Количество лотов
            if (Total>1)
            {
               OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,slippage,B id+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,CLR_NONE);
            }
         }
      }
   }

   return;
}
[свернуть]


Тут код, возвращающий тип последней сделки:
_http://forum.mql4.com/ru/38949/page4#434228
Теперь:

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

Код:
int type = GetTypeLastOpenPos(_Symbol, mn);
if(type == OP_BUY)
{
   // Открываем в продажу
}
if(type == OP_SELL)
{
   // Открываем в покупку
}
[свернуть]
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Tonyr (10.02.2015)
Старый 10.02.2015, 04:10   #3537 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Возможно я не понял задачи.
И еще, постарайтесь, пожалуйста, форматировать свой код прежде чем его запостить.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.02.2015, 04:38   #3538 (permalink)
Местный знаток
 
Аватар для Vyacheslav88
 
Регистрация: 30.01.2014
Сообщений: 278
Репутация: 983
Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 - Vyacheslav88 -
Сказал(а) спасибо: 424
Поблагодарили 982 раз(а) в 178 сообщениях
Поинты: 46
Здравствуйте. Подскажите пожалуйста, как прописать в индикаторе функцию: shift - смещение индикатора по горизонтали?
Vyacheslav88 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 10.02.2015, 06:11   #3539 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Индикаторы не писал, но думаю что нужно в буфере отрисовки сдвинуть значения на shift ячеек.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.02.2015, 09:31   #3540 (permalink)
 
Аватар для strannik-ps
 
Регистрация: 05.01.2012
Сообщений: 1,151
Репутация: 7843
strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps strannik-ps
Сказал(а) спасибо: 3,958
Поблагодарили 7,799 раз(а) в 1,882 сообщениях
Поинты: 82
Сообщение от Vyacheslav88 Посмотреть сообщение
Здравствуйте. Подскажите пожалуйста, как прописать в индикаторе функцию: shift - смещение индикатора по горизонтали?
Все зависит от индикатора, если значение из буфера и сдвиг по барам вперед-назад то достаточно добавить:
PHP код:
SetIndexShift(0,Shift); 
Если используется внешний индикатор то можно так:
PHP код:
...= iAO(NULL0+Shift); 
strannik-ps вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Vyacheslav88 (10.02.2015)
Ответ

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


Опции темы

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

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



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


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