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

 
Craft:

下午好,继续掌握编码,从教程部分的文章中提取了EA的例子,替换了例子中的代码。

为了训练目的,对一个任意的。

交易没有显示出来,请告知原因是什么,如何修复代码。


double MA_1[]; // нет обьявления размера, не видно как (локально или глобально) обьявлен, 
// не видно оператора двигающего индекс массива.
// лучше пока не освоили работу с массивами обьявите переменные и не парьтесь

  double MA_0=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,0);
  double MA_1=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,1);
  
  if (MA_1 < MA_0)
     {                                          // ..МА последнего бара выше предыдущего
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1 > MA_0)
     {                                          // ..МА последнего бара ниже предыдущего
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 

Urain,谢谢你,我对mql的逻辑从来没有停止过惊讶,如果你试图用for(int i=1;来尝试,脚本就不会简化--你能告诉我如何格式化吗,我还不能感受到语言的逻辑,如何定义移动数组的操作符?

P.S.我声明的数组,在示例脚本中被错误地删除了。

   double MA_1[];
   ArrayResize(MA_1,Period_MA);

   MA_1[0]=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,0);

   if (MA_1[1] < MA_1[0])
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[1] > MA_1[0])
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 
Abzasc:
价格上的差异。因此,不同的,相反的,指标结果...
我没有看到那里有什么不同。抛开指标,再次强调,适合你的就是你的交易指标。你根本就没有集中精力去做正确的事。
 
#属性 indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 blue
#property indicator_color2 Red

外来的int n = 20。
外部int t3_period = 5;
外部双b = 0.618。
外来的int mBars = 300。
extern int Bars.Count = 0。
int i,t,c;
double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n,
AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;


//+------------------------------------------------------------------+
int init() {
SetIndexStyle(0, DRAW_LINE)。
SetIndexBuffer(0, Buf1)。
SetIndexStyle(1,DRAW_LINE)。
SetIndexBuffer(1, Buf2)。
return(0); }
//+------------------------------------------------------------------+
int start() {
int限制。
如果(IndicatorCounted()<0)返回(-1)。
limit=Bars-IndicatorCounted()。
如果(Bars.Count>0 && limit>Bars.Count) limit=Bars.Count。
for(int i=0; i<limit; i++)
{

b2=b*b;b3=b2*b;c1=-b3;c2=(3*(b2+b3));c3=-3*(2*b2+b3);c4=(1+3*b+b3+3*b2);n1=t3_period。

if(n1<1) n1=1; n1=1+0.5*(n1-1); w1=2/(n1+1); w2=1-w1。

如果(AcBars==0) AcBars=Bars-mBars。

for(c=AcBars; c<=Bars-1; c ++) { i=Bars-1-c; {

if(Close[i]>Close[i+1]) { Ch_p[i]=Close[i]-Close[i+1]; CF_p[i]=Ch_p[i]+CF_p[i+1]; Ch_n[i]=0; CF_n[i]=0; }
else { Ch_p[i]=0; CF_p[i]=0; Ch_n[i]=Close[i+1]-Close[i]; CF_n[i]=Ch_n[i]+CF_n[i+1]; }}.

for(t=i+n; t>=i; t--) { ch_p=Ch_p[t]+ch_p; ch_n=Ch_n[t]+ch_n ; cff_p=CF_p[t]+cff_p; cff_n=CF_n[t]+cff_n; }

k_p=ch_p-cff_n; k_n=ch_n-cff_p;

A1=k_p;e1=w1*A1+w2*e1;e2=w1*e1+w2*e2;e3=w1*e2+w2*e3;e4=w1*e3+w2*e4。
e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3=c1*e6+c2*e5+c3*e4+c4*e3; Buf1[i]=t3。

A2=k_n;e12=w1*A2+w2*e12;e22=w1*e12+w2*e22;e32=w1*e22+w2*e32;e42=w1*e32+w2*e42。
e52=w1*e42+w2*e52; e62=w1*e52+w2*e62; t32=c1*e62+c2*e52+c3*e42+c4*e32; Buf2[i]=t32。

AcBars=AcBars+1; ch_p=0; ch_n=0; cff_p=0; cff_n=0; }
}

return(0); }


你能告诉我哪里出错了吗?"历史记录是正常的,而在线的却没有。

附加的文件:
 

下午好。一个数组已经被声明,移动数组索引 的操作符已经被设置,但是订单没有被放置。请告诉我什么是错的。

   double MA_1[];
   ArrayResize(MA_1,Period_MA);

   for(int j=0;j<=Period_MA-1;j++)
   MA_1[j]=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,j);

   
   if (MA_1[j+1] < MA_1[j])
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[j+1] > MA_1[j])
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 

试试OrderSend,然后就可以了...

你读过标准的MetaEditore帮助程序吗?如果没有,请阅读整个...

Craft:

下午好。我已经声明了一个数组,并定义了移动数组索引的操作符,但订单没有被放置。请告知有什么问题。

 
你们能否告诉我,是否可以重写Igor Kim的函数,该函数关闭所有亏损的订单,其亏损超过一定的数值:
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.04.2008                                                     |
//|  Описание : Закрытие тех позиций, у которых убыток в валюте депозита       |
//|             превысил некоторое значение                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pr - профит/убыток                                                      |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
          }
        }
      }
    }
  }
}
我需要找到一个损失最大的未结头寸
重点是,我需要找到比亏损头寸更多的利润头寸,并以反平仓的方式关闭它们。
也许有人在这方面有一些经验,或者面临过这样的问题?
 
为什么三个基于不同原理的指标不能显示出几乎相同的画面(spearman、随机指数和mcdrsy)--但不能显示出正确的运动和概率高于60%的入场?
 
你好,我想知道,当一个订单的利润超过X点,并开始下降到Y点>OrderOpenPrice,然后需要关闭它时,需要什么代码?
 
StatBars:

试试OrderSend,然后就可以了...

你读过标准的MetaEditore帮助程序吗?如果没有,请全部阅读...


幼稚的年龄,问一个问题,没有解决的帮助和YANDEX已经成长。有很多发送者,但职位没有开放。

double MA_1[];
   ArrayResize(MA_1,Period_MA);

   for(int j=0;j<=Period_MA-1;j++)
   MA_1[j]=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,j);

   
   if (MA_1[j+1] < MA_1[j])
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[j+1] > MA_1[j])
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
   // Открытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Total==0 && Opn_B==true)              // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=Bid - New_Stop(StopLoss);     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit);   // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      if (Total==0 && Opn_S==true)              // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         SL=Ask + New_Stop(StopLoss);     // Вычисление SL откр.
         TP=Ask - New_Stop(TakeProfit);   // Вычисление TP откр.
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Открытие Sel
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Sell ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }
原因: