新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 386

 

嗯...我没有想过要改变坐标。谢谢你的提示。

那么这里有一个问题。有一个进入点的条件。我通过静态变量 来实现它,这样它就不会在每次打勾时重置为零。那么,在图表的某些地方,机器人画出了一个入口点,那里没有水平线,因此,它们与MA的交叉点。请在你的测试器中执行该代码,你会看到问题所在。关于欧元兑美元。也许这个问题需要以不同的方式来实现?我在编程方面不是专家。

也就是说,图案已经出现,级别已经画好,机器人在等待其中一个级别的三个交叉点。

你怎么看这个问题?

 
voron_026:

嗯...我没有想过要改变坐标。谢谢你的提示。

那么这里有一个问题。有一个进入点的条件。我通过静态变量 来实现它,这样它就不会在每次打勾时重置为零。那么,在图表的某些地方,机器人画出了一个入口点,那里没有水平线,因此,它们与MA的交叉点。请在你的测试器中执行该代码,你会看到问题所在。关于欧元兑美元。也许这个问题需要以不同的方式来实现?我在编程方面不是专家。

也就是说,图案已经出现,级别已经画好,机器人在等待其中一个级别的三个交叉点。

你怎么看这个问题?

如果你不介意我这么说,谁需要它?看看机器人从哪里得到这些数值,你会发现问题的另一种解决方案。

 

帮助二号给出了一个错误!我已经用红色标出了错误,请帮助我!"。



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

//|尾部停顿由Asyll.mq4完成。

//| Copyright 2017, MetaQuotes Software Corp.

//| https://www.mql5.com |

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

#财产版权 "Alibek Asyll"

#属性链接 "https://www.mql4you.com"


Extern int TralType = 0; // 0-Sar, 1-ATR, 2-HMA.

外部双SAR_Step = 0.02。

外置双SAR_Max = 0.2。

外置 int ATR_Period = 14;

外置双倍ATR_K = 2.0。

外来的MMA_Period = 16。

extern int int MMA_Method = 3;

外部 inttern MMA_Shift = 0;

datetime LBT;

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

//|专家初始化功能|

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

int init()

{

//---

//---

return(0);

}

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

//|专家去初始化函数|

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

int deinit()

{

//---

return(0);

}

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

//|专家勾选功能|

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

int start()


{

bool error = false。

如果(LBT!=Time[0] {

如果(OrdersTotal()>0) {

for (int i=o; i<OrdersTotal(); i++){

如果(OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

double SL = OrderStopLoss();

如果(OrderType()==0) {

switch (TralType) {

case 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

突破。

case 1: SL = High[1] - iATR(NULL,0,ATR_Period,1)*ATR_K;

突破。

case 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 3, HMA_Shift,false,false," ,1,0,0)。

突破。

}

如果(SL<OrderStopLoss())

SL = OrderStopLoss()。

}

如果(OrderType()==1){

switch (TralType){

情况0:SL = iSAR(NUll,0,SAR_Step,SAR_Max,0)。

突破。

case 1: SL = Low[1] + iATR(NULL,0,ATR_Period,1)*ATR_K;

突破。

case 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 2, HMA_Shift,false,false," ,1,0,0)。

突破。

}

如果(SL>OrderStopLoss())

SL = OrderStopLoss()。

}

如果(SL!=OrderStopLoss()){

如果(!OrderModify(OrderTicket(),OrderOpenPrice(), OrderTakeProfit(),0))

error = true。

}

}

if (!error)

LBT = Time[0]。

}


return()。

}

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

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Asyll: 帮助二给出了错误!突出显示的错误为红色,请帮助我!

使用SRC按钮来插入代码 是有意义的。报告错误的文本。删除文字以加快审查员的工作。

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

//| Expert initialization function                                   |

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

int init()

  {

//---

   

//---

   return(0);

  }

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

//| Expert deinitialization function                                 |

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

int deinit()

  {

//---

   return(0);

  }

调用这些函数需要时间--而且它们是空的。而且,如果没有它们,处理程序文本会更容易。计算大括 号。为了更容易做到这一点,可以试试工具菜单中的造型器。丢弃空行。

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
 

大家好。

我有一个简单的想法,我正试图在MT-4测试器上进行编码和测试

当以下条件同时存在时,可以开立订单

1.在一分钟的蜡烛开幕时

2 以我想要的价格

3.在期望的日期

4.价格值必须与当天的价值严格吻合。

例如,27日是一个一分钟的蜡烛图,开盘价 为1.2414

我需要建立一个订单1)在开放的蜡烛图2)在1.2414 3)但在27日之后的第二天。

例如,在28日,我们有一个1分钟的蜡烛图开在1.2438。

我必须开一个订单 1) 在开放的蜡烛图上 2) 在1.2438 3) 但在28日之后的第二天

例如,在12日,有一个1分钟的蜡烛图在1.2451处打开。

我需要建立一个订单1)在开放的蜡烛图2)在1.2451 3)但在12日之后的第二天。


为了实现这个想法,我开始研究一个数组的主题,并创建了两个一维数组,但它并不工作

如果你能修改我的代码以实现上述想法,我将非常感谢你。

我是个迟钝的人,所以如果你能写出正确的代码,而不是用文字解释,我将非常感激。

这样我就会更快地理解它。

以下是我的代码。

double mass[3]=
{
1.2414,
1.2438,
1.2451
};
int mass1[3]=
{
27,
28,
12
};
double value = NormalizeDouble( Bid,4) ;
double S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);
int value1 = Day() ;
int S1 = ArrayBsearch(mass1,  value1, WHOLE_ARRAY,  0, MODE_ASCEND);

if(Bid  == iOpen(NULL,PERIOD_M1,0))
if(Day()!= S1)
if(NormalizeDouble ( Bid,4)== S)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
 

你好!这段代码的目的是当价格超过上限或下限时移动信号水平,但这并没有发生。请告诉我这是什么错误。

/-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
if(Bid>=priceA){                                                                                   //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }                                                                                                 
if(Bid<=priceB){                                                                                   //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 
ANDREY: 例如,在27日,有一个一分钟的蜡烛,开盘价 为1.2414

我需要开一个订单,1)在蜡烛的开端2)在1.2414 3)但在27日之后的最后一天。

以下是我的代码。

首先,对已经规范化的BID进行规范化处理几乎是不合理的,除非指导员告诉你要

第二,我们能得到什么?27日,价格出现,你紧急将数据输入阵列,在28日触发?如果在28日发生了什么紧急事件呢?你把数据放到一个难以计算的数组中。你的数据应该是可计算的。我建议分步骤调试你的EA。1) 确定所需的价格并使用Alert()函数显示。如果你确定它是正确的,计算并显示下一个...以此类推,直到最后。事先写好整个代码还为时过早,因为随着调试的进行,还需要对代码进行修改。你对这项从简单到复杂的技术有什么看法?

 
vikzip: 编写的代码是为了在价格超过上限或下限时移动信号水平,但这并没有发生

让我们看看这里写的是什么。首先,线条应该更短。它们在屏幕上会更合适,而且编译器会工作得更快。

/-------------------------выход цены за пределы сигнальных уровней-------------------------------------------------
if(Bid>=priceA){                  //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }
if(Bid<=priceB){                  //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------
如果BID比较大,你必须做一些事情。然后,如果BID较少,必须做同样的事情。你可以用更简短的措辞:如果价格是多还是少,那么......。
你在评论中写了一些关于移动东西的内容,但你所做的只是删除所有的对象。你的10行被4行所取代。
if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, то удалить все объекты и очистить признак поиска
   ObjectsDeleteAll();
   OR=0;                               // А это для чего?????????????????
} 

但是!!OR符号应该用在其他地方,不是吗?看来,我们应该在这里创建新的对象,而不是将这个OR归零。或者更简单--与其删除对象,不如把它们移到一个新的位置--这只是3行代码而已。还是教员要求更多?

if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));   // Так что ли???
   Objectsset( аналогично)
   Objectsset(     )
}
从简单到虚假还是反之?
 
STARIJ:

首先,将一个已经正常化的BID正常化是不可取的,除非老师告诉你

第二,我们这里有什么?27日发生了一个价格,你紧急将数据输入数组,这样它就能在28日发挥作用?如果28日有紧急状况呢?你把数据放到一个难以计算的数组中。你的数据应该是可计算的。我建议分步骤调试你的EA。1) 确定所需的价格并使用Alert()函数显示。如果你确定它是正确的,计算并显示下一个...以此类推,直到最后。事先写好整个代码还为时过早,因为随着调试的进行,还需要对代码进行修改。你如何看待这种从简单到复杂的技术?

非常感谢您的提示。

但在我看来,在你的推理中,你似乎在假设我正试图编写一个真正的EA。

很抱歉,我没有告诉你情况不是这样的。

我试图测试上述参数之间是否存在某种规律性、相关性,也就是说,确认或拒绝这种想法,这可能是TORKING专家顾问的基础。

因此,如果你能纠正我的代码,使一切符合我的上述想法,我将非常感激。

当然,在我写交易专家顾问时,你的意见也会对我有用。

谢谢你

 
ANDREY:

非常感谢你的提示。

但我看到的是,在你的推理中,你假设我正试图编写一个真正的EA。

很抱歉,我没有告诉你情况不是这样的。

我试图测试上述参数之间是否存在某种规律性、相关性,也就是说,确认或拒绝这种想法,这可能是TORKING专家顾问的基础。

因此,如果你能纠正我的代码,使一切符合我的上述想法,我将非常感激。

当然,你的意见对我在编写交易专家顾问时很有帮助。

谢谢你

对不起,打扰您了。但是...对于交易和非交易的EA来说,画线的逻辑应该有什么不同?

当你在工作时,你看手上的手表的方式与你在家里看手表的方式相比,是否有所不同?

原因: