Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 44

 
trader781:
#property strict


//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
extern double Lots=0.01; //Oбьем открываемого ордера
extern double Martin=2;
extern int    Step=200;
extern int    TakeProfit=250;

extern const string Настройки_работы_советника="";

int Period1=6;//Период 1МА
ENUM_APPLIED_PRICE PRICE1=PRICE_MEDIAN;             // 1МА По цене

int Period2=50;//Период 2МА
ENUM_APPLIED_PRICE PRICE2=PRICE_MEDIAN;             // 2МА По цене

int Period3=800;//Период 3МА
ENUM_APPLIED_PRICE PRICE3=PRICE_MEDIAN;             // 3МА По цене

int Period4=25;//Период 4МА
ENUM_APPLIED_PRICE PRICE4=PRICE_MEDIAN;             // 4МА По цене, вспомогательная

uint  X=20;                                                // отклонение от ма, пунктов
int   i;                                                   // исходный счетчик ордеров
bool  dummy;                                               // для выхода функций в переменную
int   ticket;                                            // тикет открываемого ордера
int   Magic=444;                                           // Magic Number
int   lastlot,tp;
double price;
int    count;
int    otype;



int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
     {
      if(Bars<801) //--- Проверим достаточна ли в истории баров для анализа и разрешение торговли
         return;
     }
//+----------------------------------------------------------------Сборник параметров индикаторов

   double ma1=NormalizeDouble(iMA(NULL,0,Period1,0,MODE_SMA,PRICE1,1),5);  //+----6

   double ma2=NormalizeDouble(iMA(NULL,0,Period2,0,MODE_SMA,PRICE2,1),5);  //+----50

   double ma3=NormalizeDouble(iMA(NULL,0,Period3,0,MODE_SMA,PRICE3,1),5);  //+----800

   double ma31=NormalizeDouble(iMA(NULL,0,Period3,0,MODE_SMA,PRICE3,10),5);   //+----800
   double ma32=NormalizeDouble(iMA(NULL,0,Period3,0,MODE_SMA,PRICE3,20),5);  //+----800
   double ma33=NormalizeDouble(iMA(NULL,0,Period3,0,MODE_SMA,PRICE3,30),5);  //+----800

   double ma4=NormalizeDouble(iMA(NULL,0,Period4,0,MODE_SMA,PRICE4,0),5);  //+----25
//+-----------------------------------------------------------------  Открытие ордеров по 25-50 ма

//+-------------------------------------------------- открыть ордер

   if(Counts()==0)               //+-------------если количество ордеров равно 0
     {
      if((MathAbs(ma2-ma4)>30*_Point)
         && (MathAbs(Bid-ma3)>100*Point())
         && (ma31>ma32>ma33)) //+-----покупка по 6+50
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",Magic,0,clrAzure);//+-------------отправка 1 ордера
        }
      if((MathAbs(ma2-ma3)>30*_Point))//+-------------условие продажи
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",Magic,0,clrAzure);//+-------------отправка 1 ордера
        }
        if (ticket==0)
            {
            return;
            }
     }
    
      else      //+------------если уже есть
    
        {
         if(FindLastOType()==OP_BUY)
           {
          
            if(Ask<=FindLastOrderOpenPrice()-Step*Point())
              {
               ticket=OrderSend(Symbol(),OP_BUY,(FindLastLot()*Martin),Ask,0,0,0,"",Magic,0,clrAzure);
               ModifyOrders();
               myOrdersCloseTotal();
              }
           }

         if(FindLastOType()==OP_SELL)
           {
          
            if(Bid>=FindLastOrderOpenPrice()+Step*Point())
              {
               ticket=OrderSend(Symbol(),OP_SELL,(FindLastLot()*Martin),Bid,0,0,0,"",Magic,0,clrAzure);
               ModifyOrders();
               myOrdersCloseTotal();
              }
           }
        }
     }
  
//+-------------------------------------------------------------количество ордеров в рынке

int Counts()
  {
   count=0;
   for(i=OrdersTotal()-1; i>=0; i--) //   цикл будет работать пока не останется ордеров
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic))
        {
         if((OrderType()==OP_BUY || OrderType()==OP_SELL) && (OrderTicket()==ticket))
            count++;
        }
     }
   return(count);
  }
//+---------------------------------------------------------------найти тип последнего ордера
int FindLastOType()
  {
   for(i=OrdersTotal()-1; i>=0; i--) //   цикл будет работать пока не останется ордеров
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic))
        {
         if((OrderType()==OP_BUY || OrderType()==OP_SELL) && (OrderTicket()==ticket))
            return(OrderType());
        }
     }
   return(-1);
  }
//+--------------------------------------------------------------вернуть цену последнего открытого ордера

double FindLastOrderOpenPrice()

  {
   int    oldticket;
   ticket=0;
   double oldorderopenprice=0;
   for(i=OrdersTotal()-1; i>=0; i--) //   цикл будет работать пока не останется ордеров
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic) && (OrderType()<2))
        {

         oldticket=OrderTicket();
         if(oldticket>ticket)
           {
            ticket=oldticket;
            oldorderopenprice=OrderOpenPrice();
           }
        }

     }
   return(oldorderopenprice);
  }
//+--------------------------------------------------------------вернуть объем последнего ордера
double FindLastLot()
  {
   int oldticket;
   ticket=0;
   double oldlots=0;
   for(i=OrdersTotal()-1; i>=0; i--) //   цикл будет работать пока не останется ордеров
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic)
      && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
         oldticket=OrderTicket();
         if(oldticket>ticket)
           {
            ticket=oldticket;
            oldlots=OrderLots();
           }

        }

     }
   return(oldlots);
  }
  //+---------------------------------------------------------закрыть все если хоть один из серии закрылся
  
  int myOrdersCloseTotal()


  {
  int myOrderS=0;
   for(i=OrdersTotal()-1; i>0; i--)
     {
      if(((OrderSelect(i,SELECT_BY_POS,MODE_TRADES))==true) && OrderSymbol()==Symbol() && (OrderType()<2))
        {
         myOrderS=OrdersTotal();
        }
        else
        dummy=(OrderClose(OrderTicket(),OrderLots(),Bid,0,White));
     }

   return (myOrderS);
  }

  
  
  
//+------------------------------------------------модификация существующих расчет тейка по средней цене
void ModifyOrders()
  {
   bool   z=true;
   double avg_price=0;
   price=0;
   double orderlots=0;
   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) && (FindLastOType()==OP_BUY))
        {
         price=(OrderOpenPrice()*OrderLots());
         orderlots=FindLastLot();
         avg_price=NormalizeDouble(price/orderlots,Digits);
         tp=(avg_price+TakeProfit*Point()); //+------------------------------------тут деление на 0 второго ордера
         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
        }
     }

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) &&(FindLastOType()==OP_SELL))
       {
         price=(OrderOpenPrice()*OrderLots());
         orderlots=FindLastLot();
         avg_price=NormalizeDouble(price/orderlots,Digits);
         tp=(avg_price-TakeProfit*Point());   //+------------------------------------тут деление на 0 второго ордера
         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
       }
  
  
     }
    

  }







/*    
      
*/

//+------------------------------------------------------------------+

Воот, молодец

А теперь те строки, на которые ругается компилятор. 

 
trader781:

Не хочу в этом обществе показаться навязчивым, но мне так никто не объяснил откуда берется 0 в расчетах?

пост 413 

possible loss of data due to type conversion count.mq4 231 12

possible loss of data due to type conversion count.mq4 246 12

Вы не в состоянии понять, что ТП и лоты не должны быть записаны в целочисленную переменную? Почему так?
 
Vitalie Postolache:
Вы не в состоянии понять, что ТП и лоты не должны быть записаны в целочисленную переменную? Почему так?


Можно увидеть как правильно записать подобные вещи? 

 
Artyom Trishkin:
Ещё раз спрошу: вы хотите знать что было на прошлом часе на индикаторе на тф Н1, или вы хотите знать что происходит на индикаторе на тф Н1 в данный момент времени?

Нужны значения индикатора, на первом закрытом баре Н1.

 
trader781:


Можно увидеть как правильно записать подобные вещи? 

Элементарно. 
int   lastlot,tp;
double   lastlot,tp;
 
trader781:


Можно увидеть как правильно записать подобные вещи? 

double tp;
Объявите  переменную   tp  тип double  
 
Vitalie Postolache:
Alekseu Fedotov:

Cпасибо, ошибки исчезли. Но бот все равно дохнет при запуске вместе с терминалом, только уже без каких либо видимых причин

TestGenerator: unmatched data error (volume limit 262 at 2016.12.02 12:45 exceeded)

TestGenerator: unmatched data error (high value 1.10131 at 2016.10.13 10:05 is not reached from the least timeframe, high price 1.10123 mismatches)

 
trader781:

Cпасибо, ошибки исчезли. Но бот все равно дохнет при запуске вместе с терминалом, только уже без каких либо видимых причин

TestGenerator: unmatched data error (volume limit 262 at 2016.12.02 12:45 exceeded)

TestGenerator: unmatched data error (high value 1.10131 at 2016.10.13 10:05 is not reached from the least timeframe, high price 1.10123 mismatches)

Это не бот "дохнет", это история такая. Учите английский, хотя бы со словарём.
 
Vitalie Postolache:
Это не бот "дохнет", это история такая. Учите английский, хотя бы со словарём.

И на всех парах сразу хреновая история? Совпадение?

 
trader781:

И на всех парах сразу хреновая история? Совпадение?

А что такого? Всегда так было.
Причина обращения: