Торговля спредами в Meta Trader-е - страница 142

 

Друзья !!!! Все таки я решил набить себе еще один шишкарь и написать таки советника основанный на лимит ордерах буду рад любой помощи. Уже реализованно открытие лимит ордеров на основе Кимовских ф-ций. Сейчас пробую вывести среднюю и отклонения на основе тиковой статистике (https://www.mql5.com/ru/forum/125272) (т.к. считаю все таки ее более достоверной) для открытия позиций. Надо будет реализовать модуль передвижки лимит ордера за ценой и модуль закрытия позиций при достижения профита определенного.

 
Scorp1978 >>:

...... Надо будет реализовать модуль передвижки лимит ордера за ценой и модуль закрытия позиций при достижения профита определенного.

Вот код передвижки ордеров. Пиво с тебя !

extern bool    Modify =True;
extern int     DistanceSet=14;//в пунктах
//-----------------------------------

if (Modify == true) {//если выключатель модификации включен
//если есть отложенный ордер и нет откр. одноименных позиций и
// расстояние от текущей цены превышает величину DistanceSet - модернизируем
// - т.е. подтягиваем к текущей цене
if(NumberOfOrders(NULL,OP_BUYLIMIT,Magic)>0 &&  NumberOfPositions(NULL,OP_BUY,Magic)<1){
  if( ExistOPNearMarket(NULL,OP_BUYLIMIT,Magic,DistanceSet)==0 ) { 
    for (int isl_= OrdersTotal()-1; isl_>=0; isl_-- )                  {
    if(OrderSelect(isl_,SELECT_BY_POS,MODE_TRADES))                 {
     if(OrderSymbol()==Symbol() )                                   {
      if(OrderType()==OP_BUYLIMIT && OrderMagicNumber()==Magic)      { 
      double pAsk=Ask-DistanceSet*Point;            
      if (sl!=0) double ldStop=pAsk-sl*Point;
      if (tp!=0) double ldTake=pAsk+tp*Point;         
     OrderModify(OrderTicket(), pAsk,ldStop,ldTake, 0, DarkGreen);
      Print("Modify OP_BUYLIMIT ");  Sleep(500);  RefreshRates(); }
      }}}}}
if(NumberOfOrders(NULL,OP_SELLLIMIT,Magic)>0 && NumberOfPositions(NULL,OP_SELL,Magic)<1){      
  if( ExistOPNearMarket(NULL,OP_SELLLIMIT,Magic,DistanceSet)==0 ) { 
   for (int isl= OrdersTotal()-1; isl>=0; isl-- )                  {
    if(OrderSelect(isl,SELECT_BY_POS,MODE_TRADES))                 {
     if(OrderSymbol()==Symbol() )                                   {
      if(OrderType()==OP_SELLLIMIT && OrderMagicNumber()==Magic)      { 
       double pBid=Bid+DistanceSet*Point;  
       if (sl!=0) double ldStop_=pBid+sl*Point;
       if (tp!=0) double ldTake_=pBid-tp*Point; 
     OrderModify(OrderTicket(), Bid+DistanceSet*Point,ldStop_,ldTake_, 0, DarkGreen);
      Print("Modify OP_SELLLIMIT");  Sleep(500);  RefreshRates(); }
      }}}}}            
}//выключатель модификации 
Где, - Функция ExistOPNearMarket() - 
//Данная функция возвращает флаг существования ордера или позиции около рынка
// (на заданном расстоянии в пунктах от рынка). Более точный отбор проверяемых 
//ордеров или позиций задаётся внешними параметрами:
//sy - Наименование инструмента. Если задать этот параметр, то функция проверит
// ордера или позиции только заданного инструмента. "" или NULL означает 
//текущий инструмент. 
//op - Торговая операция, тип ордера или позиции. Допустимые значения: OP_BUY,
// OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP или -1. 
//Значение по умолчанию -1 означает любую торговую операцию. 
//mn - Идентификатор ордера или позиции (MagicNumber). Значение по умолчанию -1
// - любой идентификатор. 
//ds - Расстояние от рынка в пунктах. Значение по умолчанию 1000000. 
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь                                                                |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает флаг существования позиции или ордера около рынка |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| op - торговая операция ( -1 - любая операция) |
//| mn - MagicNumber ( -1 - любой магик) |
//| ds - расстояние в пунктах от рынка ( 1000000 - по умолчанию) |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;
  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  ot=OrderType();
  if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
  if (mn<0 || OrderMagicNumber()==mn) {
  if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
  if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
  }
  if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
  if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
  }}}}} return(False); }

И функция NumberOfOrders() - 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }}}}  return(ko);}                        
 
rid


спасибо огроменное, хруст дал функцию вычисления среднего по тикам с любым периодом я ему тоже пиво обещал, придется сразу ящиком затариваться :)))) блин самому бы от радости не нажраться!!!!!

 
Получил сегодня письмо в почту мт4 Б.
//-----------------------------
"Уважаемые Клиенты, обратите внимание, что с 14 апреля 2010 года вступает в силу действие, соответствующее пункту 1.3.6. Приложения, Соглашения ВТ-08.
1.3.6. Фиксация баланса.
1.3.6.1. Процесс фиксации торгового баланса производится ежедневно, перед процессом начисления свопов.
Процедура представляет собой автоматический подсчет финансового результата всех проведенных торговых операций и сравнение этого результата с текущим балансом торгового счета. В случае расхождения сумм - баланс торгового счета будет скорректирован на сумму расхождения.
Начиная с данного момента процедура фиксации баланса будет производиться ежедневно.
В случае появления расхождений финансового результата на торговом счету после проведения данной процедуры, за разъяснениями Вы можете обратиться в отдел технической поддержки....."
//------------------------------------------------
Я что-то никак не соображу, что это за хрень?
 Какое расхождение сумм ? Откуда оно может взяться теоретически ?
О чем вообще тут идет речь?
И - ".... баланс торгового счета будет скорректирован" - это как ? 

 

Боюсь ошибиться rid, но п. 1.3.6.1 Соглашения ВТ-08, дает компании возможность еще раз пощипать клиентов.
Откуда могут взяться расхождения теоретически ?
Варианта два.
Первый, если ваши ордера были исполнены по нерыночным ценам (ну там выбросы, спайки и др. сбои) - компания будет решать судьбу таких отдеров, и определять, что есть "нерыночная цена". Но это случается не часто и не так страшно.
Второй вариант более важен для трейдера. Представим себе, что на момент фиксинга, компания будет раздвигать торговые спреды. Это значит, что по всем Вашим открытым позициям суммарный профит будет уменьшаться, и эта разница будет списываться с баланса... Такую процедуру компания будет проводить в конце каждого торгового дня, - и это будет похоже на скрытое свопирование... Ни чёрт, ни дьявол не сможет воспрепятсвовать таким действиям компании... она же хозяйка CFD...

Конечно, всем хотелось бы верить в порядочность компании, и что она не будет так жульничать..., время покажет..., но надо же где то изыскивать средства для тяжбы за океаном и дорогущих адвокатов...

 
GEFEL >>:

.....
Второй вариант более важен для трейдера. Представим себе, что на момент фиксинга, компания будет раздвигать торговые спреды. Это значит, что по всем Вашим открытым позициям суммарный профит будет уменьшаться, и эта разница будет списываться с баланса... Такую процедуру компания будет проводить в конце каждого торгового дня, - и это будет похоже на скрытое свопирование........

Сижу соображаю.....
Спреды действительно изрядно раздвигаются ежедневно в момент сессионного дневного окончания торгов (по тем инструментам, по которым предусмотрен перерыв между суточными сессиями, т.е. почти по всем товарным и фьючерсным - для нашей методики торговли).
Не совсем понятно. При такой ситуации временно уменьшаться будет эквити (средства), но никак не баланс.
Ведь позиции-то остаются открытыми и баланс тут не может никак изменится.
А если этот "расширившийся" спред будут (при открытии новой сессии) списывать с баланса, то это никак не укладывается у меня в голове.
Впору ежедневно каждый вечер сохранять ДЕТАЛИЗИРОВАННЫЙ ОТЧЕТ и утром скрупулезно сравнивать с "новым балансом"... 
Видимо так.

 
Знакомый поставил вопрос в техподдержку.
Получет ответ.
http://www.procapital.ru/showthread.php?p=649145#post649145
 
rid писал(а) >>
Знакомый поставил вопрос в техподдержку.
Получет ответ.
http://www.procapital.ru/showthread.php?p=649145#post649145


тоже прочитал ответ в техподдержке и так понимаю что ничего страшного не будет(надеюсь)

 

Баланс = средства + суммарный профит по открытым позициям...

 

А эта фразочка в ответе, выделенная красным, Вас не смущает ... Еще раз повторю: на закрытые сделки это никак не повлияет, все их показатели останутся как есть. Проверяется только итоговый баланс счета.
Само собой, править уже закрытые позиции ни кто не собирался. Это была бы кража со взломом. А вот в открытые вполне могут залезть...
У меня нет реала в Б..., и мне как бы до лампочки, а тебе rid действительно посоветую устроить сверку вечернего и утреннего баланса...

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