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

 
Code:


好吧,让我们尝试用另一种方式来看待它。

vteor12可以写成(dVolume+vback1)/k1(系数1)。

vrealUP12可以写成(dVolume+vback1)/k2(系数2)。

正如我试图描述的指标意识形态,它包括一些理论和实际水平的比较。为了获得这些水平,我将同一数值(dVolume+vback1)与一些理论值(k1)和实际值(k2)进行比较(即划分)。很明显,K1我只是在编造,把事情放在正确的名称里。或者,如果你愿意的话,做一个假设。现在,这必须与一些东西进行比较。在这种情况下,没有什么比图表本身更客观和真实。因此,我把开盘和收盘的差异,作为特定时间段的底线。而这里唯一的任务是把它带到相同的数字,这就是为什么它要乘以1000。

试着在计算器上计算几个不同的相邻烛台的变体,根据这个非常简单的公式,你可能会对各种结果感到惊讶。

而在学校的逻辑方面,你是对的。我加了量+量/价,你在学校不能这样做。:))

我将通过...:)))

你最初不是在显示方面有问题吗?你解决了吗?

 
MaxZ:

我将通过...:)))

你最初不是在显示方面有一些问题吗?你解决了吗?


是的,我做到了,顺便说一下。我没有考虑到这是一条线,而不是一个直方图。这条线应该有2个点。由于代码没有描述所有的变体,而只是描述了连续上升的2根蜡烛,在第二个上升的蜡烛之后是一个下降的蜡烛的情况下,指标没有画出任何东西。而这是正确的。当我想明白后,我把它修改为直方图。

顺便说一下,不要把我关于加减法规则的推理放在心上。:)))

如果你能帮助我继续编写代码,我将非常感激。那是最开始的时候。在连续两个烛台之后,我想按照同样的原则连续计算3个、4个等等的烛台。显然,这段代码应该是循环的,有蜡烛图的搜索,对吗?我还做不到这一点。但不要纠结于被什么划分的问题。:)))

 

移植自

VladimirR 29.07.2011 23:02 am 更正|删除

你好。我终于写出了我的第一个EA!我不太明白它是如何运作的。当某些条件得到满足时,该EA设置了2个挂单。两个订单的止损等于卖出(买入)挂单的高点[1](低点[1]),止盈总是等于止损的点数。我注意到在策略测试器中,利润并不总是等于以点为单位的止损。 请告诉我这是如何发生的。这是计算止损单的代码(程序中没有其他改变止损的地方)。

//-2-анализ на установку buystop---------------------------------------------------------------------------------+
  if(Close[1]>=MA_17 && MA_3<=MA_17)
   {
    deposit_order=true;
    type_order =4;
    open_price =High[1];
    stop_loss  =Low[1];
    take_profit=NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
    if(Lot==0) Lot=MarketInfo(symb,MODE_MINLOT);
   }
 //-3-анализ на установку sellstop-------------------------------------------------------------------------------+  
  if(Close[1]<=MA_17 && MA_3>=MA_17)
    {
     deposit_order=true;
     type_order   =5;
     open_price   =Low[1];
     stop_loss    =High[1];
     take_profit  =NormalizeDouble(MathAbs(2*open_price-stop_loss),Digits);
     if(Lot==0)Lot=MarketInfo(symb,MODE_MINLOT);
    }

 
nadya:
你好,请你告诉我,是否可以在一个函数中给多个全局变量赋值 在这种情况下,这些变量需要在哪里声明

你可以

全局声明变量--在start()函数之前。在EA函数内,随心所欲地改变它们的值--从函数返回后,这些变量将拥有你在函数内分配给它们的值,直到你在某处再次改变它们。

 
nadya:
下午好!请你告诉我,是否可以在一个函数中为多个全局变量赋值,在这种情况下,这些变量需要在哪里声明?

例子。在myfunction里面,我们给两个全局变量 赋值。你也可以用这种方式为三个、四个或n个变量赋值。

int global1 = 1;
int global2 = 2;

void myfunction(int g1, int g2)
{
   global1 = g1;
   global2 = g2;
}

int start()
{
   // До выполнения функции:     global1=1, global2=2   <---  то что объявили в начале кода
   
   myfunction(3, 4);
   
   // После выполнения функции:  global1=3, global2=4   <---  то что присвоили в функции
}

但我认为你的问题中存在一个陷阱......

 
Code:


是的,顺便说一句,我自己已经把它整理好了。我没有考虑到这是一条线,不是一个直方图。而这条线需要2个点。由于代码没有描述所有的变体,而只是描述了连续上升的2根蜡烛,在第二个上升的蜡烛之后是一个下降的蜡烛的情况下,指标没有画出任何东西。而这是正确的。当我弄明白后,我把它转换成直方图。

顺便说一句,你不要把我关于加减法规则的推理放在心上,把它当作一个实验。:)))

如果你能帮助我继续编写代码,我将非常感激。那是最开始的时候。在连续两个烛台之后,我想按照同样的原则连续计算3个、4个等等的烛台。显然,这段代码应该是循环的,有蜡烛图的搜索,对吗?我还做不到这一点。但不要纠结于被什么划分的问题。:)))

是的,但解决这个问题的最好方法是使用带有后置 前提条件的 "while "循环,而不是带有计数器的 "for "循环。因为你不知道你会连续遇到多少个看涨或看跌的烛台。

如果你觉得很困难,就从一个更简单的问题开始。例如,以s为增量显示从a到b的数字。或者用一个循环找到n的阶乘。

为了练习,使用两种类型的循环("for "和 "while")解决这些问题。然后你可以开始改善你的指标。

 

语言中没有post-while循环,MaxZ

你帮助别人的愿望是值得赞扬的,但你自己仍然需要更好地了解这门语言。

 
Mathemat:
语言中没有后while循环。

如果你对循环进行如下组织,你将得到恰到好处的后置条件。

int i = 0;
while (True)
{
   i++;
   if (i == 10) break;
}

但我接受你的纠正。谢谢你。由于MQL4中确实有两种循环类型。"for"(有一个计数器)和 "while"(有一个前提条件)。第三种类型(有后置条件)只能有意地组织。


数学

你帮助别人的愿望是值得赞扬的,但你自己仍然需要更好地了解这门语言。

我不知道的东西,我不去那里。

而其他所有的错误都是在不经意间犯下的。我最近一直心不在焉......我只是想帮助人们。

 

MaxZ: Единственная проблема состоит в том, что если советник с данным кодом запустить в тестере, а переменной PERIOD присвоить значение PERIOD_M1, то обе функции iBarShift возвращают -1, т.е. функции не удалось найти в истории бар на ТФ M1 с таким временем... Почему так происходит, не знаю.

最有可能的是,这个功能在测试器中没有被建模(没有检查)。特别是由于exact(第四个函数参数)在默认情况下被设置为false。
 
Mathemat:
最有可能的是,这个功能在测试器中没有被建模(没有检查)。特别是精确(第四个函数参数)在默认情况下被设置为假。
我已经想好了......问题出在历史上。在被测试的期间,没有M1条的历史。
原因: