任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 569

 
你好!在学习MQL4时,出现了一个小问题。这个问题在本网站的教程中已经公布。以下是条件:任务25。创建一个程序,在这个程序中实现以下条件:如果汇率上升到指定的水平以上,那么给出一个消息,在这个消息中的文字表明汇率超过了这个水平(最多100点);在其他情况下,告知汇率没有超过指定的水平。
而这里是提议的解决方案。
//--------------------------------------------------------------------
extern double Level=1.3200;                     // Заданный уровень 
string Text[101];                               // Объявление массива
//--------------------------------------------------------------------
int init()                                      // Спец. ф-ия init()
  {                                             // Присвоение значений
   Text[1]="один ";            Text[15]="пятнадцать ";
   Text[2]="два ";             Text[16]="шестнадцать ";
   Text[3]="три ";             Text[17]="семнадцать ";
   Text[4]="четыре ";          Text[18]="восемнадцать ";
   Text[5]="пять ";            Text[19]="девятнадцать ";
   Text[6]="шесть ";           Text[20]="двадцать ";
   Text[7]="семь ";            Text[30]="тридцать ";
   Text[8]="восемь ";          Text[40]="сорок ";
   Text[9]="девять ";          Text[50]="пятьдесят ";
   Text[10]="десять ";         Text[60]="шестьдесят";
   Text[11]="одиннадцать ";    Text[70]="семьдесят ";
   Text[12]="двенадцать ";     Text[80]="восемьдесят ";
   Text[13]="тринадцать ";     Text[90]="девяносто";
   Text[14]="четырнадцать ";   Text[100]= "сто";
   // Вычисление значений
   for(int i=20; i<=90; i=i+10)                // Цикл по десяткам
     {
      for(int j=1; j<=9; j++)                  // Цикл по единицам
         Text[i+j]=Text[i] + Text[j];          // Вычисление значения   
     }
   return;                                     // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. ф-ия start()
  {
   int Delta=NormalizeDouble((Bid-Level)/Point,0);// Превышение 
//--------------------------------------------------------------------
   if (Delta>=0)                                // Цена не выше уровня
     {
      Alert("Цена ниже уровня");                // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if (Delta<100)                               // Цена более 100
     {
      Alert("Более ста пунктов");               // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert("Плюс ",Text[Delta],"pt.");            // Вывод на экран
   return;                                      // Выход из start()
  }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Step:
你好!我在学习MQL4时有一个小问题。该问题位于本网站的教程中。下面是条件:问题25。创建一个程序,在这个程序中实现以下条件:如果速率超过了指定的水平,它将输出一条信息,其中的文字将表明速率超过了水平(最多100点);在其他情况下,信息将告知速率没有超过指定水平。
而这里是提议的解决方案。


显示可能的解决方案。有助于培训。

还有其他选择。还有其他错误。

更加相信自己。实验。

 
Step:
你好!在学习MQL4时,我有一个小问题。该任务位于本网站的教程中。下面是条件:问题25。创建一个程序,实现以下条件:如果速率超过了指定的水平,它将输出一个消息,说速率超过了水平(最多100点);在其他情况下,说速率没有超过指定水平。 而这里是建议的解决方案:


P.S.

具体来说,这个例子在处理一个数组时的用处。

数据在文字中的可能表述。

使用NormalizeDouble函数和预定义的 Point变量。

有可能选择一个更容易的爱好。

 

很明显,没有办法在类中直接声明外部变量。那么有什么选择呢?如果我不想在专家顾问本身或其他地方声明这些外部的特定变量,这些变量只有在使用这个类时才需要。我认为唯一的选择是做一个inluder,它将声明这些外部变量。然后这个班级应该被纳入其中,对吗?

然后为了调用这个类,你需要包含这个类本身。是这样吗?或者可以有一些其他的变种?

在我看来,这并不是什么好事。大量嵌套的包含文件,以创建...这就是为什么我有这样一个问题。

还是像通常的库一样,在声明类之前先声明外部变量并导入所需的库,这仍然是可能的。我的意思是像这样的事情。

// Объявляем внешние переменные
extern type Var1;
extern type Var2;
extern type Var3;

// Подключаем требуемые библиотеки
//#include <LBase.mqh>
//+---
//#include <Logging.mqh>
#import "user32.dll"
     int GetAncestor;
     int PostMessageA;
#import
//
class CLogging
{
   protected:
 // защищенные данные
   public:
 // открытые данные
};
我以前从未见过这种情况。所以我想知道我的方向是否正确......
 
在向专家顾问传输指标代码时,发生错误。 已经通过Comment将它们作为全局变量输出到终端屏幕上。

if(BullBear!="")
{
retXB=(zz[A4]-zz[B4])/(zz[A4]-zz[X4]+0.000001);
retAC=(zz[C4]-zz[B4])/(zz[A4]-zz[B4]+0.000001);



通过Comment将它们作为全局变量输出到终端屏幕。没有零,只有负数。然后我改变了

//---- indicator buffers
double zz[1500];

//---- indicator buffers
double zz[300];
一切都归位了,把它放回去。没有错误!原因是什么?我还关掉了互联网。
 
semargl988:

在向专家顾问传输指标代码时,发生错误。 代码部分的零除法

...

通过Comment将它们作为全局变量输出到终端屏幕。没有零,只有负数。然后我改变了

...

到 。

...

一切都落到了实处,把它放回原处。完全没有错误!其原因是什么?我又关闭了一些互联网。

我还得到了"零除法"的错误,即分数的分母中不能传递零。现在,在划分之前,我做了一个正式的检查,如。

if(znamenatel==0)
{
 какое-то действие;
}

然后错误就消失了。也就是说,如果分母=0,即使程序员100%确定那里没有0,编译器也应该被指示如何处理。

 

你好,请你帮我写一下代码好吗?我需要EA做一件基本的事情--在接近垂直(即严格意义上的时间,而不是价格)线时开仓,即在指定的shi间隔内,我这里有120,即我理解的--2分钟。线条的颜色应该决定是买入还是卖出。我在互联网上搜索并重写了它,得到了以下结果。

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

由于某种原因,它没有交易。它没有在日志中写入任何错误...
 
dmitriyriy666:

你好,请你帮我写一下代码好吗?我需要EA做一件基本的事情--在接近垂直(即严格意义上的时间,而不是价格)线时开仓,即在指定的shi间隔内,我这里有120,即我理解的--2分钟。线条的颜色应该决定是买入还是卖出。我在互联网上搜索并重写了它。

void OnTick()
{
int AllObject = ObjectsTotal();
for ( int i = 0; i < AllObject; i++)
{

string NameObj = ObjectName(i);
Colorrr = ObjectGet(NameObj, OBJPROP_COLOR);
Vremyaaa = (ObjectGet(NameObj, OBJPROP_TIME) - shi);
if(Vremyaaa == TimeLocal())
break;
}

int kolpos = 0;

if((Colorrr == Green)||(Colorrr == Aqua)){operacia = "OP_BUY";}
if((Colorrr == Red)||(Colorrr == Purple)){operacia = "OP_SELL";}
for (int pos = 0; pos < OrdersTotal(); pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
kolpos++;
}
}
}
if(kolpos == 0)
{
if (iTime(NULL,0,1) == Vremyaaa)
{
int ticket = OrderSend(Symbol(), operacia, Lot, Bid, 10, 0, 0, "5", Magic, 0, col);
}

}

}

由于某些原因,该代码没有交易。它没有记录任何错误...

如果你的时间与终端时间重合,你可以使用TimeLocal(),但 TimeCurrent()更可靠

将operacia变量类型改为int,并删除OP_BUY和OP_SELL的引号

 
AlexeyVik:

如果你有与终端时间相同的时间,你可以使用TimeLocal(),但 TimeCurrent()更可靠

将operacia变量类型改为int,并删除OP_BUY和OP_SELL的引号



谢谢你。关于TimeCurrent,这是真的,我的时间与服务器时间不一致。修好了,但还是不能用......不在日志中写任何错误。


P.S. 在我之前的帖子中,不知为何插入了没有空格的代码。但我想我把所有的大括号都放对了。

 

MT4 - 625,当试图用库测试猫头鹰时,测试者信息。

2014.03.29 18:38:48.753 'C:\Program Files\Admiral1\MQL4\Libraries\ingLib094.mq4' 不是32位版本

在那只猫头鹰顺利编译之前,图书馆也没有一个字。事实上,我根本就不明白。

我的系统(我指的是Windows)是32位的,我从来没有过其他的系统。第七次。

图书馆是我的母语,与它一路同行。在新的建设中实时进行得很好。包括与其他猫头鹰。在早期版本的测试器中也没有问题。

但在测试器中却不想打开,原因竟然是被吸走了手指。

在所有的手册中,没有一个字 提到32位的情况。