[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 186

 
Vinin:


如果(c %2==0// 偶数


我不会重复检查与任何东西的平等性。
 
你能告诉我如何在已经关闭的亏损订单上运行for循环吗?或者,也许有人已经有了一个功能:当亏损的交易被关闭时,乘以一手?
 
tara:

我不会用任何东西来加倍检查是否平等。


我想我之前写过,只针对整数。还是你读得不好?

Vinin 18.09.2011 03:14 am |删除
尼克XXX

问题为一个谜题)。

如何以编程方式 确定一个数字是偶数还是奇数?

比如说。

int a, b, c;

a=2;

b=3;

c=a+b

c是偶数还是奇数?



如果数字是整数,检查除以2的余数。

if (c % 2==0) //четное

 

澄清代码错误


阿凡达
2
Qwuyt 18.09.2011 11:56

下午好!

请不懒的人看一下代码,告诉我的错误是什么。我在编译时出现了一堆错误。这是我的第一个EA,我刚刚开始了解它。专家顾问的想法如下:在周一的某个时间,我们在距离前一周收盘价X个点的地方双向放置挂单。周五,在给定的时间,我们将关闭市场订单并删除挂单。这就是全部。

//+------------------------------------------------------------------+
//|                                                         Week.mq4 |
//|                                          Copyright © 2011, Qwuyt |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Qwuyt"
#property link      ""

//--- input parameters
extern double    lot=0.01;                                                 //размер лота 
extern int       tp=200;                                                   //тейк профит
extern int       sl=50;                                                    //стоплосс
extern int       move=100;                                                 //движение цены 
extern int       hc=22;                                                    //час закрытия 
extern int       ho=4;                                                     //час закрытия
double BP;                                                                 //цена открытия бай
double SP;                                                                 //цена открытия селл
int Ticket;                                                                
int Tip;                                                                   //тип ордера
int Curday;                                                                //день недели
bool Ans = false;                                                          //ответ сервера после закрытия ордера
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                               
  {
  int Curday = DayOfWeek                                    
  double BP = iClose(NULL,10080,1)+NormalizeDouble(move*Point,Digits);     //      
  double SP = iClose(NULL,10080,1)-NormalizeDouble(move*Point,Digits);
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие бай
    {
    OrderSend (Symbol(),OP_BUYSTOP,lot,BP,3,sl,tp,NULL,0,0,Red)
    }
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие селл
    {
    OrderSend (Symbol(),OP_SELLSTOP,lot,SP,3,sl,tp,NULL,0,0,Red)
    }
    while(true)                                                           //цикл закрытия орд.
     {
      if (Tip==0 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      if (Tip==1 && hc >= Hour && Curday=6)                               // Открыт ордер Sell, 22 часа пятницы закрыть
        {                                                                 //

         RefreshRates();                                                   // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);
         return;                                                          // Выход из start()
        }
      if (Tip==4||Tip==5 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderDelete(Ticket,CLR_NONE);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      break;                                                               // Выход из while
     }
     Tip = OrderType();
return();
  }
附件文件
Week_1.mq4(4.52 KB)



929
abolk 18.09.2011 12:00 am correct |delete

以此开始。

1) 在每个运算符的末尾加上;。

2) 使用正确的函数,例如Hour()

 
Falmera:
你能告诉我如何在已经关闭的亏损订单上运行for循环吗?或者,也许有人已经有了一个功能:当亏损的交易被关闭时,乘以一手?

有什么提示吗?
 
Falmera:

提建议!


让我看看你自己实现这一功能的尝试--"新手帮助 "主题。

或搜索 "搜索最后关闭的订单 "或类似的内容--这个话题已经存在很长时间了。

 
Falmera:

好吧,给我一个提示。

看雪崩支部的猫头鹰。
 

我正在学习一种编程语言,我在理解程序的行为方面遇到了困难。 根据教科书写了一个EA,但我把它扭曲成一个稍微不同的操作原理。

专家顾问是基于2μW的平均数。这个想法很简单,移动平均线交叉,订单被关闭,相反的订单被打开。我已经写了一个EA,它工作得很好。当然,它处于轻微的劣势,但符合想法。整个问题如下(黑体字)。

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

如果我改变移动平均线的计算方式(可以显示加号),用指数法 MODE_SMA) 代替简单法(MODE_EEMA )和另外一种(MODE_SMMA),即所谓的平滑法,一切都会出错。工作原理变得更加有趣(在策略测试器中),因为EA在设定的时间段的最开始打开一个订单,并在结束时关闭它。也就是说,对于一年来说,它在期初开出一个单一的交易,并在期末关闭。结果,专家顾问向我展示了一个加号,但我不需要这样的加号。我可以自己掷硬币,打开买入或卖出订单,看看,我在一年内是赢还是输。顺便说一下,如果我把MODE_SMA 设置为MODE_LWMA 线性加权移动平均),程序就能正常工作

请告诉我,什么是错的?原理是一样的,只是移动平均线的计算方式有了一些改变。

整个代码在附件中。


我在这里得到了答复,但他们并不称职,也不在案情上。据称,我使用了4条移动平均线。这不是真的,有两条移动平均线,但对于每条移动平均线都取了两个条形的值(总共有4个数组调用,A、B、C、D):1和2。此外,他们写道,当一个订单被关闭时,我们应该降低订单总数的数量,但没有必要这样做,因为订单是用Odertotal函数计算的,如果我关闭一个订单,订单总数本身在下一次迭代中会改变其值。他们还建议使用所谓的神奇数字来跟踪订单,但我还没有看到手册的这一部分。我应该重申,当使用MODE_SMA和MODE_LWMA时,程序可以工作,但当使用MODE_EMA和MODE_SMMA时,则不能工作。谁知道为什么,请给我写一个答案。

附加的文件:
 
Falmera:

请给我一个提示。
去雪崩主题,那里有足够的顾问,有任何地段的增量。在右上方的论坛中搜索,或用谷歌搜索。
 
neisseria:

我正在学习一种编程语言,我在理解程序的行为方面遇到了困难。我根据教科书写了一个EA,但我把它扭曲成一个稍微不同的操作原理。

专家顾问是基于2μW的平均数。这个想法很简单,移动平均线交叉,订单被关闭,相反的订单被打开。我已经写了一个EA,它工作得很好。当然,它处于轻微的劣势,但符合想法。整个问题如下(黑体字)。

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // C

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // D

如果我改变移动平均线的计算方式(可以显示加号),用指数法 MODE_SMA) 代替简单法(MODE_EEMA )和另外一种(MODE_SMMA),即所谓的平滑法,一切都会出错。工作原理变得更加有趣(在策略测试器中),因为EA在设定的时间段的最开始打开一个订单,并在结束时关闭它。也就是说,对于一年来说,它在期初开出一个单一的交易,并在期末关闭。结果,专家顾问向我展示了一个加号,但我不需要这样的加号。我可以自己掷硬币,打开买入或卖出订单,看看,我在一年内是赢还是输。顺便说一下,如果我把MODE_SMA 设置为MODE_LWMA 线性加权移动平均),程序就能正常工作

请告诉我,什么是错的?原理是一样的,只是移动平均线的计算方式有了一些改变。

整个代码在附件中。


我在这里得到了答复,但他们并不称职,也不在案情上。据称,我使用了4条移动平均线。这不是真的,有两条移动平均线,但对于每条移动平均线都取了两个条形的值(总共有4个数组调用,A、B、C、D):1和2。此外,他们写道,当一个订单被关闭时,我们应该降低总订单的数量,但这是没有必要的,因为订单是用Odertotal函数计算的,如果我关闭一个订单,订单总数本身在下一次迭代时就会改变其值。他们还建议使用所谓的神奇数字来跟踪订单,但我还没有看到手册的这一部分。我应该重申,当使用MODE_SMA和MODE_LWMA时,程序可以工作,但当使用MODE_EMA和MODE_SMMA时,则不能工作。谁知道为什么,请给我写一个答案。


我还会仔细检查条件。那里可能有一个问题