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

 
Vitaly Muzichenko:
你是一次性把价格放进去,还是先拿到价格,然后再放进去计算?
维塔利-穆齐琴科
你是一次性设定价格,还是拿到价格后再粘贴到计算中?
int k=period。
for(int i=1; i<=period; i++)
{
H1_Close[i]=Close[k];
k--;
}
我从timesession中抽取了一块相当于从最后一个闭合的条形图开始的时间,并在数组中翻转,因为1是timesession中的倒数第二条,计算必须从第i条开始。
也就是说,我的函数应该返回最后一个收盘条的SMMA值。
 
大家下午好。
下面的代码编码了一个简单的想法。
如果最后关闭的订单是在SEL
如果最后关闭的订单在NEL上
打开一个NEL订单
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                            
if ( OrderType ()==OP_SELL)                                            
X = OrderProfit( );                                            

if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                            
if ( OrderType ()==OP_BUY)                                              
if(X < 0)                                              

OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );



问题
在这段代码中,可以用什么语言结构来增加两个条件(红色圈出)?

如果最后关闭的订单是NEL
如果最后一个CEL订单关闭
如果最后一个关闭的订单已经在NEL上关闭
如果最后一个关闭的订单已经在SL

谢谢你的帮助


如果你能写出代码,而不仅仅是解释要做什么,我将非常感激。
 
你好。我正在写一个脚本来删除所有的挂单。然而,它只删除了一个订单。我总是有两个待处理的订单或一个。在这两种情况下,它只删除一个买入止损点。要删除卖出止损,你必须再次运行脚本,只要没有其他买入止损订单。请告知错误在哪里。

空白 删除订单()
{
int Total=OrdersTotal()。
for(int i=0;i<Total;i++)
如果(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType(),ticket=OrderTicket()。
bool c;
switch(type)
{
案例4:
c=OrderDelete(ticket)。
if(!c)
Print(GetLastError())。
突破。
案例5:
c=OrderDelete(ticket)。
if(!c)
Print(GetLastError())。
突破。
}
}
}
 
0B53RV3R:
你好。我正在写一个脚本来删除所有的挂单。然而,它只删除了一个订单。我总是有两个待处理的订单或一个。在这两种情况下,它只删除一个买入止损点。要删除卖出止损,你必须再次运行脚本,只要没有其他买入止损订单。请告知错误的位置。

空白 删除订单()
{
int Total=OrdersTotal()。
for(int i=0;i<Total;i++)
如果(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType(),ticket=OrderTicket()。
bool c;
switch(type)
{
案例4:
c=OrderDelete(ticket)。
if(!c)
Print(GetLastError())。
突破。
案例5:
c=OrderDelete(ticket)。
if(!c)
Print(GetLastError())。
突破。
}
}
}
改变搜索的方向 for(i=total-1;i>=0;i--)
 
Maxim Kuznetsov:
改变搜索方向 for(i=total-1;i>=0;i--)
谢谢你,现在可以了。我的理解是否正确,当索引为0的订单被删除时,索引为1的订单被分配索引为0,在下一次迭代时i == 1,而没有这样的订单。你能告诉我是否是这种情况吗?
 
0B53RV3R:
谢谢你,现在可以了。我的理解是否正确,当一个索引为0的订单被删除时,一个索引为1的订单被分配了索引0,在下一次迭代时i == 1,没有这样的订单出现。你能告诉我是否是这种情况吗?
对。
 

有一个可定制的分形功能,嗯,天哪,这太重了。我只留下了画物体的部分,以直观地显示分形是否正确形成--这是不可能的。

问题:我们怎样才能使它更容易,因为视觉测试 是愚蠢的。

extern int FrLeft=15; // Баров слева
extern int FrRight=5; // Баров справа

//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow  = Low [nFrDn]; // Цена нижнего фрактала

SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);

// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}

//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);

  for(pos=nRight+1; pos<bars; pos++) {
   r=nRight;
   if(mode==MODE_UPPER) {
    CopyHigh(symb,tf,0,pos+equals+1,_high);
    for(i=1; i<=r; i++) {
     if(_high[pos]<=_high[pos-i]) break;
   }}
   if(mode==MODE_LOWER) {
    CopyLow(symb,tf,0,pos+equals+1,_low);
    for(i=1; i<=r; i++) {
     if(_low[pos]>=_low[pos-i]) break;
   }}
   //--
   if(i==r+1) {
    l=nLeft;
    e=equals;
     for(int j=1; j<=l+equals; j++) {
      if(mode==MODE_UPPER) {
       if(_high[pos]<_high[pos+j])  break;
       if(_high[pos]>_high[pos+j])  l--;
       if(_high[pos]==_high[pos+j]) e--;
      }
      if(mode==MODE_LOWER) {
       if(_low[pos]>_low[pos+j])  break;
       if(_low[pos]<_low[pos+j])  l--;
       if(_low[pos]==_low[pos+j]) e--;
      }
      if(l==0) {
       cn++;
       if(cn>numFr) return(pos);
      }
      //--
      if(e<0) break;
   }}
  }
   Print(__FUNCTION__": Фрактал не найден");
  return(0);
}

//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
                                           int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
    ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
    ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
   }
}

谢谢!

 
Vitaly Muzichenko:

有一个可定制的分形功能,嗯,天哪,这太重了。我只留下了画物体的部分,以直观地显示分形是否正确形成--这是不可能的。

问题:我怎样才能使它更容易,因为目测 它是很愚蠢的。

谢谢!

你只能通过把它全部变成一个指标来使它更容易。即使是图表左上角的评论,特别是测试者自己放的仓位 开仓和平仓 标记,也会拖慢测试的速度。
 

你好。您能给新来的人一些建议吗?

这里有一个例子。

如果(Condition1)

如果(Condition2)

{

}

否则

{

}

根据代码,Else应该指的是if(condition1),如果condition1不被满足,将被执行。

但事实上,如果Condition2不被满足,它也会被执行。

 
Andy-D:

你好。您能给新来的人一些建议吗?

这里有一个例子。

如果(Condition1)

如果(Condition2)

{

}

否则

{

}

根据代码,Else应该指的是if(condition1),如果condition1不被满足,将被执行。

但事实上,如果Condition2不被满足,它将被执行。


有条件的立即养成放卷曲牙套的习惯

如果(Condition)

{

}

A 根据你的问题

if(Условие1)
   {
       if(Условие2)

        {

        }
    }
   else

    {

    }