[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 347

 

请帮助我改进这个代码,以获得一个简单的专家顾问。实质很简单:我们在当前价位 上开出2个卖出和布伊的头寸,并指定止损。然后当其中一个或两个触发时,我们就开立新的头寸。它的本质似乎很简单,但它仍然不工作 非常感谢!

//+------------------------------------------------------------------+
//| 2DiffOrders.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double lots=0.01;
extern int SL_in_pips;
extern int TP_in_pips;
int x2;
int init()
{
if(SL_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && SL_in_pips>0)
{
SL_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Stoploss установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
if(TP_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && TP_in_pips>0)
{
TP_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Takeprofit установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
x2=1;
while(x2!=0)
{
if(OrderSend(Symbol(),0,lots,Ask,2,Bid-15*Point,Bid+15*Point,0)!=-1)
{
Alert("Ордер типа BUY успешно открыт");
OrderSend(Symbol(),1,lots,Bid,2,Ask+15*Point,Ask-15*Point,0);
x2=GetLastError();
if(x2==0)
Alert("Ордер типа SELL успешно открыт");
if(x2!=0)
Alert("Ордер типа SELL не открыт. Ошибка №: ",x2);
}else
{
x2=GetLastError();
if(x2!=0)
Alert("Ордер типа BUY не открыт. Ошибка №: ",x2);
}
}
//----
return(0);


附加的文件:
ala.mq4  3 kb
 
Reshetov >> :

这只是看起来完全正确,但在机器视图中,最后一点可以有不同的值。即2.9999,3或3.00000001


为了摆脱这种误解,在MQL中有一个NormalizeDouble()函数。

是的,NormalizeDouble()有帮助,谢谢。

但仍然不清楚这怎么可能,这似乎是一个简单的除法,如果你用0.5或0.9甚至0.31除以0.1,一切都很正常。

而这里他显然有2.9,这不清楚......计算器更准确 :-)

感谢Reshetov和 splxgf 的帮助。

 
mukata >> :


但还是不清楚这怎么可能,似乎只是一个简单的除法。 而如果你用0.5或0.9甚至0.31除以0.1,也是可以的。

而这里是2.9,这不清楚......计算器更准确 :-)


计算器内置了四舍五入功能。而且它们的解决方式相同,因为它们使用相同的数学协处理器来计算浮点数字。

 

你好!

能否请你给我一个提示?

我自己也不明白怎么做。

任务。

EA每天都会放1-2个订单。

变量的初始值是手动设置的,可以取1到10的值。

你需要将之前设定的变量以1的增量改为-10的值

在EA的每个工作日,如果当天TP没有被执行,则只增加1。

当TP被执行时,该变量返回值-1。

计算SL并不合适,因为它可以是一个或两个,而且数值每天只能改变一次。

I.e.

变量=1

第1天SL - 变量=2

第2天SL - 变量=3

第3天SL - 变量=4

第4天TP - 变量=1

第5天 SL - 变量 =2

...以此类推。

帮助!

谢谢你。

 
Enter писал(а)>>

请帮助我改进这个代码,以获得一个简单的专家顾问。这个想法很简单:我们在当前的价格上建立2个卖出和贝的头寸,并指定止损。然后当其中一个或两个触发时,我们就开立新的头寸。它的本质似乎很简单,但它仍然不工作 非常感谢!

对于专家的工作来说,顾问的 "肉 "应该被放在启动功能中。
 

行家们,请帮忙。

有一个代码可以计算单期动量,并将其与大周期整合,然后作为指标输出。

我需要写一个给定周期的指标,找到所得曲线的平均值并作为指标输出。

代码见附件。

#属性 indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_width1 2

//------- 外部指标参数 ----------------------------------------+
外部int MTM_Period = 1;
//extern int MTM_Integr_Period = 1000;

//extern int Applied_Price = 0; // Used price:
// 0 - 价格_关闭
// 1 - price_open
// 2 - 价格_高
// 3 - 价格低
// 4 - 价格_中位数
// 5 - 价格_典型
// 6 - 价格_加权
extern NumberOfBars = 1000; //条数(0-全部)。

//------- 指示器缓冲区 ---------------------------------------------------+
double buf0[];

//+----------------------------------------------------------------------------+
//|自定义指标初始化功能
//+----------------------------------------------------------------------------+
void init() {
SetIndexBuffer (0, buf0)。
SetIndexEmptyValue(0,0)。
SetIndexLabel(0,"i-tm_integr")。
SetIndexStyle(0,DRAW_LINE)。
}

//+----------------------------------------------------------------------------+
//|自定义指标去初始化功能|
//+----------------------------------------------------------------------------+
void deinit() {
评论(")。
}

//+----------------------------------------------------------------------------+
//|自定义指标迭代函数|
//+----------------------------------------------------------------------------+
空白启动() {
int LoopBegin, i,j, per=3;
双重MTM,MTMSUM。

如果(NumberOfBars==0)LoopBegin=Bars-1。
否则LoopBegin=NumberOfBars。
LoopBegin=MathMin(LoopBegin, Bars-1)。

for (i=LoopBegin; i>=0; i--) {
mtm=Close[i]-Close[MTM_Period+i]。
mtmsum=mtmsum+mtm。
buf0[i]=mtmsum。
}
/* for (i=LoopBegin-per;i>=per;i--){
mtm=Close[i]-Close[MTM_Period+i]。
mtmsum[i]=0+mtm。
for (j=per;j<=0;j--){
mtmsum[i]=0+mtmsum[i+j];
mtmsum[i]=mtmsum[i]/per。
buf0[i]=mtmsum[i]。
}
}*/
}
//+----------------------------------------------------------------------------+

 
VNG писал(а)>>

行家们,请帮忙。

有一个代码可以计算单期动量,并将其与大周期整合,然后作为指标输出。

我需要写一个给定周期的指标,找到所得曲线的平均值并作为指标输出。

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_width1 2

//------- Внешние параметры индикатора ----------------------------------------+
extern int MTM_Period = 1; 
//extern int MTM_Integr_Period = 1000; 

//extern int Applied_Price = 0; // Используемая цена:
// 0 - PRICE_CLOSE
// 1 - PRICE_OPEN
// 2 - PRICE_HIGH
// 3 - PRICE_LOW
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PRICE_WEIGHTED
extern int NumberOfBars = 1000; // Количество баров обсчёта (0-все)
extern int MA_Period=3;
extern int MA_Mode=0;

//------- Буферы индикатора ---------------------------------------------------+
double buf0[];
double MA[];
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init() {
  SetIndexBuffer (0, buf0);
  SetIndexEmptyValue(0, 0);
  SetIndexLabel (0, "i-mtm_integr");
  SetIndexStyle (0, DRAW_LINE);
  SetIndexBuffer (1, MA);
  SetIndexLabel (1, "MA");
  SetIndexStyle (1, DRAW_LINE);

}

//+----------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() {
Comment("");
}

//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start() {
  int LoopBegin, i, j, per=3;
  double mtm, mtmsum;

  if ( NumberOfBars==0) LoopBegin=Bars-1;
  else LoopBegin= NumberOfBars;
  LoopBegin=MathMin( LoopBegin, Bars-1);

  for ( i= LoopBegin; i>=0; i--) {
    mtm=Close[ i]-Close[ MTM_Period+ i];
    mtmsum= mtmsum+ mtm;
    buf0[ i]= mtmsum;
  }
  for ( i= LoopBegin- per; i>= per; i--){
     MA[ i]= iMAOnArray( buf0, 0, MA_Period, 0, MA_Mode, i);
  }
}
//+----------------------------------------------------------------------------+
也许这个变体就可以了。没有检查代码,在浏览器中写的
 
Reshetov >> :

这只是看起来完全正确,但在机器视图中,最后一点可以有不同的值。即2.9999,3或3.00000001

为了摆脱这种误解,MQL有NormalizeDouble()函数


为什么NormalizeDouble()函数不对Ask、Bid、Low等的所有值默认运行?

每个人都上当了,然后不得不 "手动 "修复......奇怪的是,MT不能阅读它自己催生的东西。

 
Silen >> :

谢谢,是否能保证在start()中能得到数据?

你可以尝试使用RefreshRates()--见标准MetaEditor帮助中的例子。

 

EA优化 中,有一个 "保存为报告 "的选项,但 "输入参数 "在Internet Explorer中没有显示。

尽管从HTML代码来看,它们是存在的。总的来说,正是为了这些参数才开始优化的。

也许有人知道如何在资源管理器中看到它们?


(也有可能通过单独的命令将它们复制到文本文件,但最好是在IE中看到它们)

原因: