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

 
Omm:

подскажите как определить время дневной торговли фьючём?

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbol(),MODE_EXPIRATION)

выдаёт нули


какой брокер ?

собственно говоря как брокер настроит. так что в первую очередь надо пытать его.

 
alexey1979621:
Уважаемые форумчане! Как прописать в советнике условие пересечения ценой линии канала, скажем, цена сверху пересекает линию канала и сделка открывается или закрывается? Прошу обратить внимание, что интересует именно момент этого пересечения. Буду признателен за помощь.

double price0=NormalizeDouble(ObjectGetValueByShift("ИмяВащейЛинииКанала", 0),Digits)); - значение Вашей линии на баре 0.

double price1=NormalizeDouble(ObjectGetValueByShift("ИмяВащейЛинииКанала", 1),Digits)); - значение Вашей линии на баре 1.

Ну и самый простецкий способ определить момент пробития на нулевом баре: if(High[0]>price0 && High[1]<=price1) {линия пробита вверх}, if(Low[0]<price0 && Low[1]>=price1) {линия пробита вниз}. ifы будут TRUE c момента пробития до конца текущего бара. Желательно чтобы Ваша линия канала имела свойство OBJPROP_RAY==True

 
alexey1979621:
Уважаемые форумчане! Как прописать в советнике условие пересечения ценой линии канала, скажем, цена сверху пересекает линию канала и сделка открывается или закрывается? Прошу обратить внимание, что интересует именно момент этого пересечения. Буду признателен за помощь.

Парочка способов:

Если Ask > линии канала и Low[1] <=линии канала, то пересечение вверх

Если Bid < линии канала и High[1] >=линии канала, то пересечение вниз

Можно проверять при помощи МА с периодом 1

 
как можно выбрать в программе последний ЗАКРЫТЫЙ ордер и получить от него информацию?
 
Благодарю за помощь

. Я наверное некорректно поставил вопрос, нужно было приложить часть кода. Исправляюсь.

По предложению

artmedia70 пересечение на закрытие указал так. Сделку закрывает согласно скрина. Но нужно, чтобы сделка была закрыта где крестик

void CheckForClose()
{
double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}

 
 
webip:
как можно выбрать в программе последний ЗАКРЫТЫЙ ордер и получить от него информацию?

Найдете все, что душе угодно.
 
alexey1979621:
Благодарю за помощь

. Я наверное некорректно поставил вопрос, нужно было приложить часть кода. Исправляюсь.

По предложению

artmedia70 пересечение на закрытие указал так. Сделку закрывает согласно скрина. Но нужно, чтобы сделка была закрыта где крестик

void CheckForClose()
{
double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Low[1]<=PriceHigh && Ask>=PriceHigh ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
break;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PriceLow && Bid<=PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
break;
}
}
//----
}

ExtremeTMA - безбожно перерисовывают. Причём здоровенный кусок истории - баров 30 последних, если не больше. Писал по нему советника - лажа. Представьте себе: появился сигнал, вошли по нему, а спустя некоторое время этого сигнала на истории уже нет - индюк перерисовался и оказывается - зря входили

При определении пересечения вы допустили ошибку: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... нужно так if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... ну и для противоположного по аналогии.

ЗЫ Код вставляйте при помощи кнопочки SRC на панельке вверху окна ввода вашего сообщения

ЗЗЫ Ну и где скрин с крестиком?

 
artmedia70:

ExtremeTMA - безбожно перерисовывают. Причём здоровенный кусок истории - баров 30 последних, если не больше. Писал по нему советника - лажа. Представьте себе: появился сигнал, вошли по нему, а спустя некоторое время этого сигнала на истории уже нет - индюк перерисовался и оказывается - зря входили

При определении пересечения вы допустили ошибку: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... нужно так if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... ну и для противоположного по аналогии.

ЗЫ Код вставляйте при помощи кнопочки SRC на панельке вверху окна ввода вашего сообщения


Исправил, закрыл сделку так же как и на скрине выше, а надо где красный крестик.

согласен, что ExtremeTMA перерисовывает, но полагаю что это не влияет на поиск точек входа, здесь главное фильтры. Я использовал индикатор TDI. Чего наколдовал прикладываю (сразу говорю, что руки у меня кривые, поэтому проект советник под стать рукам). Одна проблема с ним, в тестере 1 год тестирует часов 5 (где то закралась ошибка). Если не сложно посмотрите на предмет ошибок.

extern double  Lots             = 0.1;
extern string Сomment           = "TMA Canal2";
extern int TakeProfit           = 20;     //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss             = 20;     // уровень Stop Loss для покупки;
extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 124;

extern string  Indi             = "ExtremeTMALine";
extern string TimeFrame         = "current time frame";
extern int    HalfLength        = 56;
extern int    Price             = PRICE_CLOSE;
extern double ATRMultiplier     = 2.0;
extern int    ATRPeriod         = 100;
extern bool   Interpolate       = true;
extern double TrendThreshold    = 0.5;
extern bool   Distances         = false;


extern string  Indicatora       = "TradersDynamicIndex";
extern int RSI_Period           = 13;         //8-25
extern int RSI_Price            = MODE_CLOSE;           //0-6
extern int Volatility_Band      = 34;    //20-40
extern int RSI_Price_Line       = 2;      
extern int RSI_Price_Type       = MODE_SMA;      //0-3
extern int Trade_Signal_Line    = 7;   
extern int Trade_Signal_Type    = MODE_SMA;   //0-3
extern bool UseAlerts           = false;

double PriceHigh, PriceLow, SL, TP, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
int ticket;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==3 || Digits ==3) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
         }
      return(0);
}


//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
   
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double PriceHigh, PriceLow, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
   int ticket;

//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
   
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);
   TDIHigh = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 1, 0); // голубая
   TDILow = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 3, 0); // голубая 
   RSIPriceLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 4, 0); // зеленая
   TradeSignalLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 5, 0); // красная
   
   
   if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh || Ask>=PriceHigh && TDIHigh > 68 && RSIPriceLine < TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow || Bid<=PriceLow && TDILow < 32 && RSIPriceLine > TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
      return;
     }
//----
  }

  //+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
 
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0); 
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0); 
   
   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Low[1]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(High[1]>=PriceLow && Bid<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
   {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
 
alexey1979621:

Исправил, закрыл сделку так же как и на скрине выше, а надо где красный крестик.

согласен, что ExtremeTMA перерисовывает, но полагаю что это не влияет на поиск точек входа, здесь главное фильтры. Я использовал индикатор TDI. Чего наколдовал прикладываю (сразу говорю, что руки у меня кривые, поэтому проект советник под стать рукам). Одна проблема с ним, в тестере 1 год тестирует часов 5 (где то закралась ошибка). Если не сложно посмотрите на предмет ошибок.

Пока не смотрел на предмет ошибок - дел полно.

Для того, чтобы закрыть Sell там, где красный крестик, нужно проверять на текущем баре. Если Ask<=уровню закрытия && High[1]>уровня закрытия

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