Полезные функции от KimIV - страница 59

 
Обновлённый список функций
Файлы:
f_kimiv_1.rar  12 kb
 

Игорь, подскажите пожалуйста, есть ли функция котрая определяет минимальное значение в пунктах для установки отложенного ордера?

Спасибо!

 
mozg писал(а) >>
Игорь, подскажите пожалуйста, есть ли функция котрая определяет минимальное значение в пунктах для установки отложенного ордера?
MarketInfo(Symbol(), MODE_STOPLEVEL);
 

Здравствуйте Игорь!  Не могли бы вы написать функцию, которая будет останавливать советника от повторной отработки сигнала? Например поступил сигнал на бай..советник купил.. закрылся по Тейку или траллу/стоплоссу..Но условия сигнала Бай все еще действуют и советник повторно идет на бай (вот этого "повторного открытия позы" или "повторной отработки сигнала"  хотелось бы исключить) То есть стейт, после добавления этого блока кода должен выглядеть так.. бай,сел,бай,сел,бай,сел.... ну и т.д..

 
Shniperson писал(а) >>

Здравствуйте Игорь! Не могли бы вы написать функцию, которая будет останавливать советника от повторной отработки сигнала? ... То есть стейт, после добавления этого блока кода должен выглядеть так.. бай,сел,бай,сел,бай,сел.... ну и т.д..

свинги...

//+----------------------------------------------------------------------------+
//|  Управление позициями.                                                     |
//+----------------------------------------------------------------------------+
void ManagePositions() {
  double sl=0, tp=0;
  int    bs=GetTradeSignal();

  if (bs>0) {
    if (ExistPositions(NULL, OP_SELL, Magic)) ClosePositions(NULL, OP_SELL, Magic);
    if (!ExistPositions(NULL, OP_BUY, Magic)) {
      if (StopLoss  >0) sl=Ask-StopLoss  *Point; else sl=0;
      if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0;
      OpenPosition(NULL, OP_BUY, Lots, sl, tp, Magic);
    }
  }
  if (bs<0) {
    if (ExistPositions(NULL, OP_BUY, Magic)) ClosePositions(NULL, OP_BUY, Magic);
    if (!ExistPositions(NULL, OP_SELL, Magic)) {
      if (StopLoss  >0) sl=Bid+StopLoss  *Point; else sl=0;
      if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0;
      OpenPosition(NULL, OP_SELL, Lots, sl, tp, Magic);
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Возвращает торговый сигнал:                                               |
//|     1 - покупай                                                            |
//|     0 - сиди, кури бамбук                                                  |
//|    -1 - продавай                                                           |
//+----------------------------------------------------------------------------+
int GetTradeSignal() {
  int bs=0;

  if (условия для покупки) bs=1;
  if (условия для продажи) bs=-1;

  return(bs);
}

ExistPositions()

ClosePositions()

 

Функция NormalizePrice().

Данная функция возвращает нормализованное значение цены. Нормализация выполняется с применением значений функции MarketInfo(MODE_TICKSIZE || MODE_DIGITS). Функция NormalizePrice() принимает следующие параметры:

  • np - Нормализуемое значение лота. Обязательный параметр.
  • sy - Наименование торгового инструмента. NULL или "" - текущий символ. Значение по умолчанию - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.08.2008                                                     |
//|  Описание : Возвращает нормализованное под размер тика значение цены.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    np - нормализуемое значение цены.                                       |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//+----------------------------------------------------------------------------+
double NormalizePrice(double np, string sy="") {
  if (sy=="" || sy=="0") sy=Symbol();
  double pp, ts=MarketInfo(Symbol(), MODE_TICKSIZE);
  int    di=MarketInfo(Symbol(), MODE_DIGITS);

  if (ts>0) pp=NormalizeDouble(np/ts, 0)*ts;
  else {
    if (di>0) pp=NormalizeDouble(np*di, 0)/di; else pp=np;
  }
  return(pp);
}

ЗЫ. Во вложении скрипт для тестирования функции NormalizePrice().

Файлы:
 

(Вопрос от новичка)

Многоуважаемый KimIV Написал функцию:

GetExtremumZZPrice().


double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
Какого вида должен быть код чтобы обозначал цены последнего минимума и максимума в 2 переменные ? ( у меня уже мозги кипят ;(( )
 
WroC писал(а) >>
Какого вида должен быть код чтобы обозначал цены последнего минимума и максимума в 2 переменные ?
void start() {
  double p1=GetExtremumZZPrice("", 0, 0);
  double p2=GetExtremumZZPrice("", 0, 1);

  if (p1>p2) Comment("Последний максимум ", p1, "\nПоследний минимум ", p2);
  else Comment("Последний максимум ", p2, "\nПоследний минимум ", p1);
}
 

KimIV

Спасибо!

 
Игорь, здравствуйте!
По мере своих способностей пытался понять материал изложенный Вами. Честно говоря я пока не пользовался ни советниками, ни скриптами, и никакого практического опыта работы с ними не имею, но есть потребнось в создании скрипта, который бы помог в расстановке большого количества ордеров.
Задача скрипта облегчить расстановку отложенных ордеров (В основном Buy stop и Sell stop)
Т.е. например в параметрах скрипта устанавливается:
1. Уровень с которого выставляются ордера ( например EUR\USD Buystop c 1.3000)
2. Размер каждого ордера (например 0,01)
3. Шаг установки ордеров (например 1 pip)
4. TP каждого ордера (например 3 pip)
5. Количество выставляемых ордеров (например 70) или уровень до которого нужно выставить отложенные ордера, (например до 1.3070).
Параметры стоп-лосс и трейлинг стоп в скрипте желателены, но необязателены...
Предполагается, что раз в 3-4 часа включается компьютер, анализируется ситуация и принимается решение установить ордера на пробой диапазона вверх ( или вниз), с периодом открытия ордеров в 1 пип, но с минимальным ТР (3 пипа) . Таким образом в случае движения цены в нужную сторону данные ордера начнут открываться и в случае достижения нужной цены будут закрываться по ТР. Далее возможны вариант когда они все закроются по ТР - если движение цены пройдет все ордера, или часть ордеров ( 6 шт) будет открыто и будет "минусовать". В данном случае предполагается выставить следующую "лесенку" ордеров в обратную сторону с другими параметрами ( размер лота, шаг, ТР, кол-во ордеров), которые будут покажутся трейдеру наиболее оптимальными.
В конце торгового дня "встречные позиции" будут закрываться, тем самым оставляя трейдеру около 6 ордеров направленных или вверх (или вниз)
Заранее спасибо за экспертный ответ!
Причина обращения: