[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 227

 

亲爱的专业人士,我需要你们的帮助(pli-is)。 我想在我的EA中做一个功能,在屏幕的后角显示关于不同时间段的当前趋势和即将发生的反转的通知。我正在使用我的LinearRegression和Diverg函数来实现这一目的。 然而,我从未使用过Comment 函数,因此无法理解我在哪里犯了错误。总之,由于以下代码的结果,显示了 "趋势W = 下降 "的题词,但我希望也有关于其他TF的信息。

void UPDN ()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) < 0) Comment("Trend H1 = Up");
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comment("...!H1上的枢轴 = 下降";
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) < 0) Comment("趋势 H4 = 上升");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comment("...!H4的枢轴 = 下降";
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comment("Trend D1 = Up");
if(Diverg(LR_TFr_3,0,Diver_Per_D1) < 0) Comment("....!D1的枢轴 = 下降");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comment("Trend W = Up");
if(Diverg(LR_TFr_4,0,Diver_Per_W) < 0) Comment("...!Pivot to W = Down";

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) > 0) Comment("Trend H1 = Down");
if(Diverg(LR_TFr_1,0,Diver_Per_H1) > 0) Comment("....!H1的支点=上升");
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comment("趋势H4=下降");
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comment("...!Pivot on H4 = Up");
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comment("Trend D1 = Down");
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("...!Pivot on D1 = Up");
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comment("Trend W = Down");
if(Diverg(LR_TFr_4,0,Diver_Per_W) > 0) Comment("....W = Up");
return(0);
}

 
Optim:

亲爱的同事-专业人士,我需要你们的帮助(pli-is)。 我想在我的EA中做一个功能,在屏幕的后角显示关于不同时间段的当前趋势和即将发生的反转的通知。我正在使用我的LinearRegression和Diverg函数来实现这一目的。 然而,我从未使用过Comment函数,因此无法理解我在哪里犯了错误。总之,下面的代码只显示 "趋势W=下跌 "的信息,但我希望它能通知我其他TF。

无效 UPDN ()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diverg_Per_H1, 0) < 0) Comment("Trend H1 = Up")
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comment("...! Turn at H1 = Down")。
如果(LinearRegression(Symbol( ), LR_TFr_2, 0, Diverg_Per_H4, 0) < 0) Comment("Trend H4 = Up" )
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comment("...!H4趋势反转=下跌")
如果(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comment("Trend D1 = Up")
if(Diverg(LR_TFr_3,0,Diver_Per_D1)<0) Comment("...! Pivot on D1 = Down")。
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comment("Trend W = Up");
if(Diverg(LR_TFr_4,0,Diver_Per_W)<0) Comment("; )

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diverg_Per_H1, 0) > 0) Comment("Trend H1 = Down")
if(Diverg(LR_TFr_1,0,Diver_Per_H1)>0) Comment("...!H1趋势反转=上升")。
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comment("Trend H4 = Down")
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comment("...!H4趋势反转=上升")。
如果(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comment("Trend D1 = Down")
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("...! Pivot on D1 = Up")。
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comment("Trend W = Down")。
if(Diverg(LR_TFr_4,0,Diver_Per_W)>0) Comment("...!Diverg to W = Up" )
return(0);
}


空白注释(...)
该函数在图形的左上角输出一个用户定义的注释。参数可以是任何类型。参数的数量不能超过64。

数组不能被传递给Comment()。数组必须一个元素一个元素地打印。

双重类型的数据在输出时,点后有4位小数。要打印精度更高的数字,请使用DoubleToStr() 函数。
bool、datetime和color类型将被打印成数字。
要将日期时间数据输出为字符串,请使用TimeToStr() 函数。

为了将输出分成多行,您可以使用换行符"\n "或"\r\n"。
另见Alert()Print()
参数。
...-任何数值,以逗号分隔。
例子。
 double free=AccountFreeMargin(); Comment("账户自由保证金是",DoubleToStr(free,2),"/n", "当前时间是",TimeToStr(TimeCurrent())。
 
在提出问题之前,至少要阅读文件。一半的答案已经在那里了
 

谢谢你,我知道了。我需要根据每个TF的LinearRegression和Diverg函数的结果输入变量,然后用一个注释输出,可以分几行。

 
Optim:

谢谢你,我知道了。我需要根据每个TF的LinearRegression和Diverg函数的结果输入变量,然后用一个注释输出,可以分几行。


只有在行的长度 方面有限制。你可以使用亚历山大-帕克的功能。如果你找不到,我就自己去找。
 

亲爱的先生们!

我有一个关于通过引用传递一个数组的问题。

该算法方案如下。

我们通过引用将一个数组从一个库传到另一个库。

我们使用内置函数将其复制到那里。

ArrayCopy。

接下来,通过引用传递的数组被使用

在第一个模块中。

但由于某些原因,出现了错误,而且并不总是如此。

也就是说,有时阵列被复制,有时不被复制。

原因是什么?

该日志条目如下。

21:07:12 openHistory CADCHF,H1。

ArrayCopy函数的2个数组范围(0和4)。

连接模块

拷贝

 
Roger:
那是因为你把我的例子复制错了。仔细看看哪里是i,哪里是k。

根据你的情况纠正了代码。
在测试时,四个订单按照它们在第一个tick上设置的顺序关闭,第五个在下一个tick上关闭。可能这里有别的问题,因为我已经测试过很多次了。
我向你提供程序的代码和测试者的日志。
真诚的。舒尔金

Код программы.
//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link      ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,NormalizeDouble(Bid-35*Point,Digits),
NormalizeDouble(Ask+35*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1,Ask,0,NormalizeDouble(Bid-25*Point,Digits),
NormalizeDouble(Ask+25*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUYLIMIT,1,NormalizeDouble(Ask-15*Point,Digits),0,
NormalizeDouble(Bid-40*Point,Digits),NormalizeDouble(Ask+25*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_BUYLIMIT
OrderSend(Symbol(),OP_SELLSTOP,3,NormalizeDouble(Ask-30*Point,Digits),0,
NormalizeDouble(Bid+15*Point,Digits),NormalizeDouble(Ask-75*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_SELLSTOP
//----
   PriTP=Bid;//PriTP
   Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++;//Tick
//   Print("Кс0:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
//   for(i=OrdersTotal()-1; i>=0; i--)//
   for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс1:"," Tick=",Tick," i=",i," k=",k);//Сообщение
   if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера k
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;//?
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0, int k=0; i<OrdersTotal();i++,k++)
/*   
   for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс1:"," Tick=",Tick," i=",i," k=",k);//Сообщение
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;//Зачем сначала прибавлять и тут же убавлять ???
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
*/   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Записи в журнале тестера.
2013.03.18 13:58:21     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=4 i=1 k=1
2013.03.18 13:58:21     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=4 i=0 k=0
2013.03.18 13:57:57     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=3 i=1 k=1
2013.03.18 13:57:57     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=3 i=0 k=0
2013.03.18 13:57:33     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=2 i=1 k=0
2013.03.18 13:57:33     2013.02.11 12:15  Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3394
2013.03.18 13:57:33     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=2 i=0 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=3 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=2 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=1 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ1: Tick=1 i=0 k=0
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: Êñ0: OrdersTotal=7
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03.18 13:57:09     2013.02.11 12:15  Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03.18 13:57:09     Poligon1 test started
2013.03.18 13:57:02     Poligon1 EURUSD,M15: loaded successfully
 
从减少程序执行的资源消耗的角度来看,哪里是声明变量类型(int、double等)的最佳位置。例如,int i可以全局声明,也可以在int start()中声明 ... for (int i=OrdersTotal()-1; i>=0; i--) ...我感觉在每个tick 上声明它比在全局水平上声明一次,就在extern参数之后,成本更高。 或者资源密集度的差异是一样的?
 
Zhunko:
你必须在开始时进行循环。在圈内工作。你可以在那里做任何事情。

这有点不同。当连接丢失时,日志显示 "Ping failed",这意味着有故障,但由于某种原因没有记录。
在CPU和内存上的负荷有多少是通过循环而增加的?

 
Dimka-novitsek:

晚上好!对不起,我想回到一个未解决的问题上。

'买入' - 不兼容的类型 D:\TeleTRADE\experts/experts/clean.mq4 (102, 53)

'Sell' - 不兼容的类型 D:\TeleTRADE\experts\clearlist.mq4 (102, 79)


if (!Pishem&&PozyProstavleny){SaveArray(FileBuy, Buy); SaveArray(FileSell, Sell); Pishem=1;}

这一行不能编译。