Советники: iMA price crossing - страница 3

 
odyn:

Уважаемый Владимир!

В структуре имеется переменная lot_coefficient. Она инициируется нулем.

Затем в нескольких местах эта переменная используэтся для условий оператора if:

Не могли бы Вы обьяснить, ЗАЧЕМ это делается? 

Насколько я понимаю, переменная нигде в коде не меняет значение. Или я неправ?

Ввёл эту строку на всякий случай: иногда бывает нужно передавать коэффициент - вот через структуру он и передаётся. 

 

Уважаемый Владимир!

int size_need_position=ArraySize(SPosition);//узнаем количество членов-структур массива SPosition
   if(size_need_position>0)//если  количество членов-структур массива SPosition больше 0, то
     {
      // НАЧАЛО  ЦИКЛА по каждой структуре(позиции) в массиве SPosition--------------
      for(int i=size_need_position-1; i>=0; i--)//перебор

Подскажите, пожалуйста, каким образом в массиве SPosition может быть несколько структур STRUCT_POSITION?  

 
odyn:

Уважаемый Владимир!

Подскажите, пожалуйста, каким образом в массиве SPosition может быть несколько структур STRUCT_POSITION?  

Самым элементарным образом.

Если представить на бытовом уровне: структура SPosition - это квартира, а массив структур - это многоквартирный дом. Другими словами массив - это куча чего-либо.

 
Vladimir Karputov:

Самым элементарным образом.

Если представить на бытовом уровне: структура SPosition - это квартира, а массив структур - это многоквартирный дом. Другими словами массив - это куча чего-либо.

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

 
odyn:

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

Функция SearchTradingSignals - в ней происходит поиск торговых сигналов и если сигал найден - то в массив добавляется новая структура (ArrayResize)

//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   if(m_last_deal_in==iTime(m_symbol.Name(),Period(),0))
      return(true);
//---
   double array_ma[];
   MqlRates array_rates[];
   ArraySetAsSeries(array_ma,true);
   ArraySetAsSeries(array_rates,true);
   int start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,array_ma) ||
      CopyRates(m_symbol.Name(),0,start_pos,count,array_rates)!=count)
     {
      return(false);
     }

   int size_need_position=ArraySize(SPosition);
//--- "Signal BUY"
   if(array_rates[0].open<array_ma[0])
     {
      if(array_rates[0].close>=array_ma[0]+m_crossing)
        {
         if(!InpReverse)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
         else
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
     }
//--- "Signal SELL"
   if(array_rates[0].open>array_ma[0])
     {
      if(array_rates[0].close<=array_ma[0]-m_crossing)
        {
         if(!InpReverse)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
         else
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
     }
//---
   return(true);
  }
 
большое спасибо за ответ
 
odyn:

Уважаемый Владимир!

Подскажите, пожалуйста, зачем вот эти переменные в функции OnTradeTransaction, которые потом не используются?

Это тянется давно - для примера, какую именно информацию можно получить о сделке из торговой истории. Начиная с версии движка 3.115 в OnTradeTransaction теперь такая конструкция:

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal))
         m_deal.Ticket(trans.deal);
      else
         return;
      if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
           {
            if(m_deal.Entry()==DEAL_ENTRY_IN || m_deal.Entry()==DEAL_ENTRY_INOUT)
               m_last_deal_in=iTime(m_symbol.Name(),Period(),0);
            int size_need_position=ArraySize(SPosition);
            if(size_need_position>0)
              {
               for(int i=0; i<size_need_position; i++)
                 {
                  if(SPosition[i].waiting_transaction)
                     if(SPosition[i].waiting_order_ticket==m_deal.Order())
                       {
                        Print(__FUNCTION__," Transaction confirmed");
                        SPosition[i].transaction_confirmed=true;
                        break;
                       }
                 }
              }
           }
        }
     }
  }
 
barabashkakvn Trading engine 3.115 можно увидеть в EA Trix 2
EA Trix 2
EA Trix 2
  • www.mql5.com
Доработка первой версии (EA Trix).  советник переписан на новом торговом движке на баре может быть только одна сделка 'вход в рынок' (это внутренний параметр, он не вынесен во входные параметры и это не имеет отношения к параметру ' Only one positions') при работе в режиме 'внутри бара' ('Search signals, in seconds' больше или равно '10'...
 

Уважаемый Владимир!

Подскажите, пожалуйста, как в вашем советнике отключить стоп-лосс и тейк-профит? Хочу без них попробовать.

 
odyn:

Уважаемый Владимир!

Подскажите, пожалуйста, как в вашем советнике отключить стоп-лосс и тейк-профит? Хочу без них попробовать.

Вот же в описании написано:

Торговые настройки

В советнике можно как включать, так и выключать Stop LossTake Profit и  Trailing StopДля отключения выбранный параметр установить в "0.0".

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