Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 704

 
borilunad:
Кто знает или кто имеет скрипт или функцию "закрытия перекрытыми ордерами", что выполняется в МТ4 вручную, когда нужно закрыть больше 2-3 позиций, чтобы как в CloseBy экономился бы спред? Буду рад любому наводящему ответу! 
Здесь.
 
TarasBY:
Здесь.


Спасибо! Попробую разобраться, чтобы вставить функцией в сов!

Извините, слишком много всего и сложно! Пока придётся поэтапно закрывать с перепроверкой, что не закрылось!

 
borilunad:


Спасибо! Попробую разобраться, чтобы вставить функцией в сов!

Извините, слишком много всего и сложно! Пока придётся поэтапно закрывать с перепроверкой, что не закрылось!

Такая функция:

/*int fClose_AllOrdersBy (double& fd_Pribul,       // Возвращаемый профит закрытых ордеров
                          int fi_Type = -1,        // тип закрываемых ордеров
                          int fi_NBars_Life = 0,   // минимальная "жизнь" ордера в барах на fi_Period: 0 - параметр не учитывается
                          int fi_Period = 0,       // Период
                          int fi_OrderProfit = 0)*/// Идентификатор профитности ордера: > 0 - профитный; < 0 - лоссовый
                                     // Функция закрытия "своих" ордеров по признаку встречными ордерами

здесь.

 
TarasBY:

Такая функция:

здесь.


Покорнейше благодарю, и не обижайтесь, пожалуйста! Я нашёл, функция больше 100 строк, и как понял, ещё и библиотеку надо прицеплять, так что, это не по мне, не потяну! Да ради 4-х, ну в крайнем случае, 6-и ордеров, не имеет смысла заваривать кашу! И не разберусь, очень уж не привычно для меня! Мне бы с моим ещё разбираться и разбираться, но всё идёт понемногу на лад! И со своим-то легче, как рыба в воде, попроще, но и со своими находками! Может, уже изобретены "велосипеды", но дойдя и сделав сам, потом легче работать со своим! Ещё раз прошу извинить! Всег благ и успехов!
[Deleted]  

Здравствуйте, товарищи! Сразу извиняюсь за нубский вопрос. Цена открытия ордера 1,61029. Использовал команду "OrderOpenPrice", чтобы это значение можно было использовать в скрипте. Проверил результат через "Alert" и получил - 1,6103. Вот код:

int start()
   {
   OrderSelect(1,SELECT_BY_POS);
   double OP=OrderOpenPrice();
   double OPP=NormalizeDouble(OP,16);
   Alert("Цена открытия ",OPP);
   return(0);
   } 

 Что нужно сделать, чтобы получить на выходе точное значение цены? Заранее спасибо. 

 
exsistentia:

Здравствуйте, товарищи! Сразу извиняюсь за нубский вопрос. Цена открытия ордера 1,61029. Использовал команду "OrderOpenPrice", чтобы это значение можно было использовать в скрипте. Проверил результат через "Alert" и получил - 1,6103. Вот код:

int start()
   {
   OrderSelect(1,SELECT_BY_POS);
   double OP=OrderOpenPrice();
   double OPP=NormalizeDouble(OP,16);
   Alert("Цена открытия ",OPP);
   return(0);
   } 

 Что нужно сделать, чтобы получить на выходе точное значение цены? Заранее спасибо. 


Если открыл Бай, по Аску, то это цена по Биду! Всё правильно, разница это спред + слиппаж, что нужно учитыват!  А точно открыть невозможно, всё в движении! ;)
[Deleted]  
borilunad:

Если открыл Бай, по Аску, то это цена по Биду! Всё правильно, разница это спред + слиппаж, что нужно учитыват!  А точно открыть невозможно, всё в движении! ;)

Видимо я не совсем точно объяснил проблему. Дело в том, что есть открытый ордер GBPUSD (не отложенный), цена открытия - 1,61029. Я в скрипте делаю запрос к этому ордеру ф-ей OrderSelect, а функция OrderOpenPrice, как я понимаю, должна вернуть реальное значение цены открытия этого самого ордера(1,61029), а возвращает округленное до 4 знака после запятой значение - 1,6103. Испытано на разных ордерах с разными ценами открытия - результат один и тот же: последней цифры нет.
 
подскажите как написать скрипт, который определит. сколько баров из последних 100, пересекли определенную горизонтальную линию
 
exsistentia:

Видимо я не совсем точно объяснил проблему. Дело в том, что есть открытый ордер GBPUSD (не отложенный), цена открытия - 1,61029. Я в скрипте делаю запрос к этому ордеру ф-ей OrderSelect, а функция OrderOpenPrice, как я понимаю, должна вернуть реальное значение цены открытия этого самого ордера(1,61029), а возвращает округленное до 4 знака после запятой значение - 1,6103. Испытано на разных ордерах с разными ценами открытия - результат один и тот же: последней цифры нет.


Для этого есть DoubleToStr(), которая напишет с Digits реальными, а так будет писать с 4-мя! Смотрите Документацию наверху слева, там всё найдёте и узнаете много + учебник! 

Вот так:

Alert("Цена открытия ",OPP);// не так

Alert("Цена открытия ",DoubleToStr(OPP,Digits);// а так
[Deleted]  
borilunad:


Для этого есть DoubleToStr(), которая напишет с Digits реальными, а так будет писать с 4-мя! Смотрите Документацию наверху слева, там всё найдёте и узнаете много + учебник! 

Вот так:

 

 



Спасибо большое! А учебник я читаю, и по ходу советник пишу.

И еще вопрос: какой наиболее простой способ узнать, что данный ордер закрыт(по тиккету)? Использовать функцию OrderCloseTime, или есть для этой цели спец. функция?