[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 289

 

ну в принципе сама стратегия очень длиная и сложная, и ее описывать нет смысла, это 1 пунк создать цикл тобиш мне надо найти чтото вместо тотал==1, что не открывал позы не сотвецтвующие запросу, тобиш если закрывается по ст то .........открывам 1, если закрылся по......... тп открывам 2, условие отсуцтвие ордера в рынке, вот и все,

 
FoxUA:

ну в принципе сама стратегия очень длиная и сложная, и ее описывать нет смысла, это 1 пунк создать цикл тобиш мне надо найти чтото вместо тотал==1, что не открывал позы не сотвецтвующие запросу, тобиш если закрывается по ст то .........открывам 1, если закрылся по......... тп открывам 2, условие отсуцтвие ордера в рынке, вот и все,


Тогда Вам просто не подходит функция Игоря которую Вы используете. Вам нужна функция которая будет возвращать тип последнего закрытого ордера и почему (тп или сл) он был закрыт. А не возвращать причину последнего закрытия ордера определенного типа. Сейчас чего-нибудь попробую придумать...

 
Figar0:


Тогда Вам просто не подходит функция Игоря которую Вы используете. Вам нужна функция которая будет возвращать тип последнего закрытого ордера и почему (тп или сл) он был закрыт. А не возвращать причину последнего закрытия ордера определенного типа. Сейчас чего-нибудь попробую придумать...


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

Попробуйте такую функцию в связке с функцией Игоря:

//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2011                                                     |
//|  Описание : Возвращает тип последней закрытой позиции                      |
//|  если Buy 1 , если Sell -1                                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    symbol - наименование инструмента                                       |
//|    magic - MagicNumber                                                     |
//+----------------------------------------------------------------------------+
int LastCloseDeal(string symbol, int magic) 
{
  int lastclosetime=-1;
  int lastcloseticket=-1;
  int lastdealtype=0;

  for (int i=0; i<OrdersHistoryTotal(); i++) 
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; 
    if (OrderSymbol()==symbol || OrderMagicNumber()==magic) 
    {
      if (lastclosetime<OrderCloseTime()) 
      {
        lastclosetime=OrderCloseTime();
        lastcloseticket=OrderTicket();
      }
    }
  }

  if (OrderSelect(lastcloseticket, SELECT_BY_TICKET, MODE_HISTORY)) 
  {
    if (OrderType()==OP_BUY) lastdealtype=1;
    if (OrderType()==OP_SELL) lastdealtype=-1;   
  }
  return(lastdealtype);
}
 

Тогда Ваш кусок кода должен выглядеть так:

bool Buystop=isCloseLastPosByStop(NULL,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake(NULL,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop(NULL,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake(NULL,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if(total==1) 
 {

   if (LastCloseDeal(Symbol(), MagBuy)==1)

  {
      if(Buystop==True)    OpenPosition(NULL, OP_SELL, Lot,Bid+Sl3*Point, Bid-Tp3*Point,MagBuy);
      if(BuyTake==True)   OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy);      
   }

   if (LastCloseDeal(Symbol(), MagBuy)==-1)

   { 
      if(Sellstop==True)   OpenPosition(NULL, OP_BUY,  Lot, 0, Ask+Tp*Point,MagBuy);
      if(SellTake==True)    OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy); 
   }  

}

 
Figar0:

Тогда Ваш кусок кода должен выглядеть так:


спс попробую
 
Привет, пожалуйста помогите реализовать выставление виртуальных стоплосов в заданных пунктах, буду по точнее: советник должен вместо отправки данных о новом SL просто хранить их в переменных (или гденидь еще), и тралить, тралить, тралить а когда цена дойдет до определенного уровня (цены) посылать сигнал в ДЦ о закытии ордера, (этакой виртуальный трейлинг стоп с виртуальным стоплосом). Иными словами эксперт включающий трейлинг стоп на невидимом уровне для сервера ДЦ от 1 пункта... реальноли это?
 
Centuriy:
Привет, пожалуйста помогите реализовать выставление виртуальных стоплосов в заданных пунктах, буду по точнее: советник должен вместо отправки данных о новом SL просто хранить их в переменных (или гденидь еще), и тралить, тралить, тралить а когда цена дойдет до определенного уровня (цены) посылать сигнал в ДЦ о закытии ордера, (этакой виртуальный трейлинг стоп с виртуальным стоплосом). Иными словами эксперт включающий трейлинг стоп на невидимом уровне для сервера ДЦ от 1 пункта... реальноли это?


Да реально конечно. Перебираете открытые ордера, у них цена открытия, например у нас есть Buy открытый по цене Х, виртуальный стоплосс Y пунктов, поэтому если текущая цена Z < = X-Y*Point ордер закрыть. Конечно надо еще учитывать спреды, а если стоплосс не постоянный, а расчетный, то рассчитаное значение надо где-то надежно хранить и т.д.

Воспользуйтесь поиском по "виртуальный стоп", "виртуальный стоплосс" и т.д.

 
Figar0:


Да реально конечно. Перебираете открытые ордера, у них цена открытия, например у нас есть Buy открытый по цене Х, виртуальный стоплосс Y пунктов, поэтому если текущая цена Z < = X-Y*Point ордер закрыть. Конечно надо еще учитывать спреды, а если стоплосс не постоянный, а расчетный, то рассчитаное значение надо где-то надежно хранить и т.д.

Воспользуйтесь поиском по "виртуальный стоп", "виртуальный стоплосс" и т.д.

Думаю, без мало-мальски оформленного собственного учёта ордеров тут не обойтись.

Создать собственный массив ордеров и в нём хранить все необходимые данные по вирт.стопам.

 
Figar0:


Да реально конечно. Перебираете открытые ордера, у них цена открытия, например у нас есть Buy открытый по цене Х, виртуальный стоплосс Y пунктов, поэтому если текущая цена Z < = X-Y*Point ордер закрыть. Конечно надо еще учитывать спреды, а если стоплосс не постоянный, а расчетный, то рассчитаное значение надо где-то надежно хранить и т.д.

Воспользуйтесь поиском по "виртуальный стоп", "виртуальный стоплосс" и т.д.

Спасибо за ответ, вот только проблема не в стоплосе а в самом трале (трейлингстопе), почему нужен виртуальный, потому что хочу тралить мин 1 пункт, а при каждом тике отправлять в ДЦ команду ОрдерМодифи это хулиганство ИМХО ))

"а если стоплосс не постоянный, а расчетный, то рассчитаное значение надо где-то надежно хранить и т.д."

а можно об это по подробней? где хранить, как вызывать, думаю это должны быть переменные или я ошибаюсь...

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