Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1341

 
DanilaMactep:

ЦЕНУ ДЛЯ УСТАНОВКИ ОТОЛЖКИ РАСЧИТЫВАЮ ВОТ ТАКИМ МАКАРОМ(МАКАР, Я ТЕБЯ НЕ ТРОГАЮ, ТЫ КА КМИНИМУМ НЕ В МОЁМ ВКУСЕ, ЧТОБЫ ТЕБЯ ТРОГАТЬ;-))

КАКИМ ОБРАЗОМ НАПИСАТЬ ПРОВЕРКУ ЧТО ПОЛУЧЕННОЕ ЗНАЧЕНИЕ ПОПАДАЕТ В ДОПУСТИМЫЕ ДИАПОЗОНЫ ВОТ ЧЕГО Я ПОАК НЕ ПОНИМАЮ, И КАКИМ БОРАЗОМ СДЕЛАТЬ ТАК ЧТОБЫ, ЕСЛИ РАСЧИТАЛОСЬ МЕНЬШЕ ДОПУСТИМОГО ТО ЧТОБЫ ВСЁ РАВНО ОРДЕР ОТКРЫЛСЯ НА МИНИМАЛЬНО ВОЗМОЖНОМ РАССТОЯНИИ?

Попробуй вот это,

думаю разберёшься.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

Попробуй вот это,

думаю разберёшься.

Алексей, большое спасибо за этот кусок кода. Но к сожалению читать чужой код не могу из-за последствий инсульта. Можно получить инструкцию по эксплуатации данного кода и рекомендацию к чему его прикрутить и каким макаром?

До меня вот что дошло. Я искал минимальную цену за икс баров во так

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

но это же не правильно, ведь мин прайс я присваиваю айхай, не лоу. исправил на лоу и ошибок сталло меньше, но всё равно встречаются(((

Поэтому если не сложно, отправьте инструкцию по эксплуатации куска скинутого кода...

 

Всем ещё раз приветJ попробовал применить те советы, которые мне написали к прошлому сообщению, но не помогло. Отложки так и выдают ошибку 130L но дело вероятно не в самом стоп лоссе, а в цене открытия. Цену открытия для бай стопа и сел стопа получаю путём определения максимальной/минимальной цены за икс свечей- вот таким образом.

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

Не в стопе дело так как с точно такими же параметрами стопа и по атр и фиксированного, рыночными ордерами всё открывается без ошибки. Значит проблема в расчёте цены установки отложки. Сами ордера открываю вот так

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S и совсем забыл сказать, что отложками я хочу сэмитировать ценовой фильтр ддля открытия позиции- то есть если цена пошла в нужную сторону то сработает отложка, а если нет то она отменится и я вне рынка. Подскажите пожалуйста что я не так делаю в определении цены открытия? И может быть есть решение проще по ценовому фильтру для сделки?

p/s очень прошу, если пишите код который можно применить, напишите к нему и подробную инструкцию т.к у меня серьёзные проблемы с чтением кода. Подробная инструкция я имею ввиду- для чего это код и как он применим (прикрутить его к какой-то переменной и с ней что-то сделать или ещё как-то по другому, и как-то попоняиней пожалуйста напишите коменты к коду). Заранее всех благодарю;-) P/S кто владеет знаниями и имеет опыт не проходите мимо- помогите по братски- не жопьтесь плиз;-) надо же Грааль допилить О_о ;-)

 
Коллеги!

Кто работал с объектами. Киньте пожалуйста пример куска кода, где бы треугольник, элипс или квадрат нарисованный вручную (я так понимаю ему присваивается какое-то имя на графике) - выполнял какое-то действие, - алерт например (в случае попадания цены внутрь этого объекта). Очень прошу. Инфы мало по этой теме, а теоретически в справочнике никак не разберусь, но подозреваю что принцип там элементарный. 
 
DanilaMactep:

Всем ещё раз приветJ попробовал применить те советы, которые мне написали к прошлому сообщению, но не помогло. Отложки так и выдают ошибку 130L но дело вероятно не в самом стоп лоссе, а в цене открытия. Цену открытия для бай стопа и сел стопа получаю путём определения максимальной/минимальной цены за икс свечей- вот таким образом.

Не в стопе дело так как с точно такими же параметрами стопа и по атр и фиксированного, рыночными ордерами всё открывается без ошибки. Значит проблема в расчёте цены установки отложки. Сами ордера открываю вот так


P/S и совсем забыл сказать, что отложками я хочу сэмитировать ценовой фильтр ддля открытия позиции- то есть если цена пошла в нужную сторону то сработает отложка, а если нет то она отменится и я вне рынка. Подскажите пожалуйста что я не так делаю в определении цены открытия? И может быть есть решение проще по ценовому фильтру для сделки?

p/s очень прошу, если пишите код который можно применить, напишите к нему и подробную инструкцию т.к у меня серьёзные проблемы с чтением кода. Подробная инструкция я имею ввиду- для чего это код и как он применим (прикрутить его к какой-то переменной и с ней что-то сделать или ещё как-то по другому, и как-то попоняиней пожалуйста напишите коменты к коду). Заранее всех благодарю;-) P/S кто владеет знаниями и имеет опыт не проходите мимо- помогите по братски- не жопьтесь плиз;-) надо же Грааль допилить О_о ;-)

В функции  iLowest, вместо  MODE_HIGH, вставьте  MODE_LOW.  

 

Подскажите, пожалуйста. Начертил на графике отрезок. Нужно узнать цены начала и конца отрезка. Это можно сделать?

Файлы:
EURUSDM1.png  22 kb
 
Forallf:

Подскажите, пожалуйста. Начертил на графике отрезок. Нужно узнать цены начала и конца отрезка. Это можно сделать?

Можно
 
Forallf:

Подскажите, пожалуйста. Начертил на графике отрезок. Нужно узнать цены начала и конца отрезка. Это можно сделать?

желательно, что бы имя у этого отрезка, было оригинальное

 
Alekseu Fedotov:

В функции  iLowest, вместо  MODE_HIGH, вставьте  MODE_LOW.  

Огромное спасибо, что заметили и подсказали- поправил это дело и за 2х летний тест было ошибок 130 26 штук. При этом 115 сделок нормально открылись
 
Порт-моне тв:
Коллеги!

Кто работал с объектами. Киньте пожалуйста пример куска кода, где бы треугольник, элипс или квадрат нарисованный вручную (я так понимаю ему присваивается какое-то имя на графике) - выполнял какое-то действие, - алерт например (в случае попадания цены внутрь этого объекта). Очень прошу. Инфы мало по этой теме, а теоретически в справочнике никак не разберусь, но подозреваю что принцип там элементарный. 

Мне кто-то поможет?

Причина обращения: