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

 
artmedia70:

我不想和你的代码打交道(邪恶,但诚实:))。准确地告诉我你最后想得到什么,我会给你写出你需要的功能。老实说--这对我来说会更容易。我应该整理出自己的代码...:)

...或者去睡觉,去睡觉,第二天你所有的谜题都会出现在一起......:)这就是我在不明白的时候所做的事情...顺便说一下,去睡觉了--已经是凌晨5点半了......


在设置完订单后,作为订单标准的变量应再次设置为 "0"。

 
谁知道呢。我怎样才能得到指标运动(在其规模上)的比率,例如RSI,与通过的货币点的比率?例如,如果RSI从0到50,相当于多少个点位?
 
Infinity:
谁知道呢。我怎样才能得到指标运动的比率(在其规模上),例如RSI,与货币的传递点的比率?例如,如果RSI从0到50 - 它将相当于多少个点?

在零蜡烛上捕捉RSI指标的最后数值。我们等待着下一次打勾。虱子已经来了。让价格正好勾兑了1个点。看看RSI有多大变化。就是这样--赔率就在我们的口袋里。
 
drknn:

捕捉零点蜡烛上的最后一个RSI指标值。我们等待着下一次打勾。虱子在这里。让我们假设价格正好跳动了1个点。看看RSI有多大变化。就是这样--系数就在我们的口袋里。

但是,这怎么可能呢,比如说,我抓住了1个点的系数,RSI在其50的刻度上通过了,原来它已经通过了50个点,但实际上它是一个平面。 而蜡烛有2个点。那么,在这种情况下,如何确定
 
cyclik33:

亲爱的阿纳托利非常感谢你的这一代码。另一个问题,如何让它一直工作,但每条街只做1笔交易?

鲍里斯,这甚至比这更简单。你放下这句话。

datetime new;

在代码的最顶端(要分开,不在任何函数中)。
然后,在那些有调用OrderSend(...)函数 的地方,只要把它放在一个额外的if运算符的拥抱中就可以了。

if(new != Time[0]){
   new = Time[0];
   // здесь функция OrderSend(...);
}

现在,在开立另一个头寸之前,它将检查当前栏位是否包含任何交易。如果有的话,当前条形将被存储在变量new中,如果当前条形与存储的条形相同,交易将不会被打开。因此,如果酒吧是新的,那么它的开盘时间将与变量new的数据不一致,交易将被打开,变量new 将得到一个新值。

我不知道你的专家顾问的具体架构,但这种方法在大多数情况下应该是有效的。

 
FoxUA:

在订单设置后,作为订单标准的变量应再次设置为 "0"。


我试着编译你的代码,它产生了错误。
你必须在两个方法(start()NewOrder1())中使用作为下单标准的变量,在所有函数之外声明这些变量。

bool b,s, //соответственно бай или селл  
bs,// если закрытие по стоплоссу ордера бай
ss,// если закрытие по стоплоссу ордера sell
bt,
st;//      то же по ТП
double bl,sl; // лоты соответсвенно для бай и селл
然后在for 循环中
for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

它们应该被赋予必要的值,在NewOrder1() 函数中成功打开订单后,它们也应该被重置为零。

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------
if(tic1<0){
   Print(GetLastError());
}else{
b=0;
s=0; 
bs=0;
ss=0;
bt=0;
st=0;
bl=0;
sl=0;
}
//-----------
return(0);}

类似这样的事情。

 
Infinity:

谁知道呢。你如何获得指标运动(在其规模上)的比率,例如RSI,与货币交叉的点数的比率?澄清一下,如果RSI从0到50 - 它将等于多少个点。

我曾经有一个类似的目标,所以我写了一个这样的 "尺子",也许对你也有用。

//+------------------------------------------------------------------+
int get_pips_RSI_path(int home_shift, int end_shift){
   double home_index, end_index;
   double home_price, end_price;
   int path;
   
   home_index = iRSI(NULL,0,14,PRICE_CLOSE,home_shift);
   home_price = Close[home_shift];
   end_index = iRSI(NULL,0,14,PRICE_CLOSE,end_shift);
   end_price = Close[end_shift];
   
   if(end_price > home_price)path = (end_price - home_price)/Point; else path = (home_price - end_price)/Point;
   
   Alert("Между значениями RSI ", home_index, " и ", end_index, " было пройденно ", path, " пунктов.");
   return(path);
}
//+------------------------------------------------------------------+

作为参数,您发送具有所需RSI值的条形图,作为回应,您会得到它们之间的距离(点)。

 
ToLik_SRGV:

我曾经有一个类似的目标,并写了一个这样的 "标尺",也许它对你也有用。

作为参数,您发送所需的RSI值所在的柱状体的移位,作为回应,您会得到它们之间的距离,单位为点。


谢谢,我今晚会检查的

我有一种强烈的感觉,由于报价历史的不完整性,对专家顾问历史的测试不会得到一个好的结果。我明白报价历史是通过存档当前市场(蜡烛图报价)形成的,但你怎么能依赖这个结果,如果真实的报价(至少在我的情况下)是飞过的,有时40分钟只是没有蜡烛,图表站着,然后它飞过所有相同的蜡烛。

 
ToLik_SRGV:

也许你只是找不到有利可图的参数组合,试着取消勾选 "忽略无用的结果 "选项。

不要忘记在专家顾问设置中为你要优化的参数勾选复选框,以及设置步骤和优化限制。

谢谢你,这就对了,"跳过无用的结果 "被选中了。
 
artmedia70:


朋友们!我想不出如何摆脱趋势线反转时出现的不必要的信号。趋势线(在例子中是下降的)是从最大的极值到最小的极值绘制的,在指定的条形间隔内发现。问题是,一旦出现一个新的最低极值,趋势线就会跳到那个极值(它是这样设计的)。

但是,也是在第一个条形图上,趋势线与趋势线的数值建立了水平,指标线对其的穿越给出了信号。如果第一个柱状图上的指标线低于这个水平,而第二个柱状图上的指标线高于这个水平,那么我们就有一个自上而下的交叉点。

所以...当趋势线跳到一个新的最低极值时,就会出现这样一种情况,即第二个柱状图上的指标线在趋势线之上,在绘图水平和第一个柱状图上的指标线之下,也就是一个不必要的卖出信号(在这个例子中)。


我们在图中可以看到,趋势已经移动到一个新的极点(位置用向下的箭头标记),而新趋势的价格水平在第一个柱子上(水平的红色短线)。
变得比第二个柱状图上的AD线低,而第一个柱状图上的AD线低于价格水平......
因此,通过将趋势线移动到一个较低的极值,模拟了一个不需要的信号...
我用一条垂直的浅蓝色线来标记它...

因此,问题是--如何避免这种情况?我想了很久都没有想出办法......。
有什么想法吗?谢谢...:)



我认为,交易信号应该在指标线与趋势线交叉时出现,而不是反过来,uas两种方式。在静态变量中保留趋势线位置的先前值,如果它们没有变化,则检查交叉点,如果趋势线改变了位置--重置...

原因: