新人对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

由于类型转换可能导致数据丢失 count.mq4 231 12

由于类型转换可能导致数据丢失 count.mq4 246 12

你无法理解TP和lot不应该被写入整数变量吗?为什么会这样呢?
 
Vitalie Postolache:
你是否无法理解TA和手数不应该被写入整数变量中?为什么会出现这种情况呢?


我们能看到如何正确地写这种东西吗?

 
Artyom Trishkin:
再说一次,你是想知道上一小时H1指标上的情况,还是想知道H1指标上此刻的情况?

你要的是指标的值,在第一个闭合的柱子H1上。

 
trader781:


我们可以看看如何正确记录这样的事情吗?

小学。
int   lastlot,tp;
double   lastlot,tp;
 
trader781:


我们可以看看如何正确记录这样的事情吗?

double tp;
声明变量tp为双倍类型
 
Vitalie Postolache:
.
阿列克谢-费多托夫

谢谢你,这些错误已经消失了。但机器人仍然在启动时死亡,连同终端一起,但没有明显的原因。

TestGenerator:不匹配的数据错误(体积限制262在2016.12.02 12:45超过)。

TestGenerator:不匹配的数据错误(在2016.10.13 10:05的高值1.10131没有从最低时间段达到,高价1.10123不匹配)。

 
trader781:

谢谢你,错误已经消失了。但机器人仍然与终端一起在启动时死亡,但没有任何明显的原因。

TestGenerator:不匹配的数据错误(体积限制262在2016.12.02 12:45超过)。

TestGenerator:不匹配的数据错误(在2016.10.13 10:05的高值1.10131没有从最低时间段达到,高价1.10123不匹配)。

不是机器人 "死了",而是这个故事。学习英语,至少要有一本字典。
 
Vitalie Postolache:
这不是机器人的 "死亡",而是故事。学习英语,至少要有一本字典。

而在所有的烟雾中一下子就有了一个低劣的故事?巧合?

 
trader781:

而在所有的烟雾中一下子就有了一个低劣的故事?巧合?

这有什么大不了的?一直以来都是这样的。