任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 538

 
denis77515:

专业人士先生,您好!不要拒绝一个编程的新人,看看代码,看看它写得是否正确。谁不是懒得去处理。我无法在策略测试器中进行测试,因为它是多货币。带有代码和指标的文件附在档案 中。


我已经为你制定了一个单一的函数来创建符号和订单数量(未结头寸)的链接数组来买入和卖出,通过在一个演示
,测试该脚本。
string Smbl[];
int CntBuy[],CntSell[];
void OnStart()
 {
    if(CountBuySell(Smbl, CntSell, CntBuy))
       for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N=0,f=0,cb=0,cs=0;
   string symbol;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         
         ot=OrderType()+1; if(ot>2)  continue;                       // пропускаем лимит ордера
         symbol=""; symbol=OrderSymbol(); if (symbol=="") continue;  // убедились что символ выбран
         f=0; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n=0; n<N; n++) if (symbol==symb[n]) f=1;               // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f==0)                                                   // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
            ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
            symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
         }
         
         if(ot==1) cb++;  // OP_BUY   для выбранного символа
         else      cs++;  // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if(N>0) return(1);   // есть открытые позиции
   return(0);           // позиций нет
}
 
evillive:

我想写一个简单的EA,当我的账户达到指定的存款货币的盈利或亏损值时关闭所有的头寸(我是按几个符号开的),但它一出现就关闭了头寸((())。

我不明白哪里出了问题。



看看这个吧。


外来的int profit = 30;

外来int Magic=0;

int CurProfit;

外部 bool CurSymbolOnly = false;


int start() // 特殊功能启动

{

//所有订单的利润计数器

双层p1。

int i1, kk1=OrdersTotal(), pr1=0;

for (i1=0; i1<kk1; i1++)

{

如果(OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))

{

如果(!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT)。

如果(p1==0)如果(StringFind(OrderSymbol(), Symbol())<0)p1=0.0001;否则p1=0.01。

如果(OrderType()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

如果(OrderType()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0)。

}

}

}

}

CurProfit=pr1。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

如果(利润<=pr1)

{

ClosePosWithMaxProfitInCurrency()。

}

return(0);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///从最贵的到最便宜的都关闭了

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)

{

double pr=0。

int i5, k=OrdersTotal(), np=-1;

如果(sy=="0")sy=符号()。

for (i5=k-1; i5>=0; i5--)

{

如果(OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

如果((OrderSymbol()==sy || sy==")&& (op<0 || OrderType()==op))

{

如果(mn<0 || OrderMagicNumber()==mn)

{

如果(pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap()。

np=i5。

}

}

}

}

}

如果(np>=0)

{

如果(OrderSelect(np, SELECT_BY_POS, MODE_TRADES)

{

{for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

如果(OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID,9);

如果(OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9) 。

}

}

}

}

closeotlojnie()。

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//closeotlojnie

关闭的空隙(void closeotlojnie)。

{

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

如果(OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket())。

如果(OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket())。

如果(OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket())。

如果(OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket())。

}

}

 
GSB:
我已经为你制定了一个单一的函数来创建符号和订单数量(未结头寸)的链接数组来买入和卖出,通过在一个演示上建立几个头寸来测试这个脚本。


谢谢你的时间,但这对我来说有点复杂,抱歉打扰了。向我解释一下什么,在哪里,如何?正如他们在手指上所说。


我从来没有使用过这种脚本的交易。

 
GSB,pako, 谢谢你们,我已经有一段时间心不在焉了,没有注意到这样的事情......
 
denis77515:

谢谢你的时间,但这对我来说有点复杂,抱歉打扰了。向我解释一下什么,在哪里,如何?正如他们在手指上所说。


我已经试过了,并在模拟账户上进行了手动交易。


如果只有错误,你是如何在模拟账户上测试的?所提出的代码无法交易。我已经在代码中添加了注释。你必须自己做所有的工作,没有知识和努力工作...你不能在证券交易所进行交易,特别是外汇。其结果将是毫不含糊的。除了上述问题,你应该使用你所选择的交易系统。2-3个月后,结果将显示出来,然后你将决定这个系统是否适合你个人和原则上的交易。
 
谢谢你,我们会努力工作的。
 
向版主或管理员提问:我可以改变我的昵称吗?我试图在MQL5注册,但结果发现我的昵称已经在那里使用了,所以我不得不用另一个昵称注册。我想在那里和这里拥有相同的昵称。当然,我也可以在这里重新注册,但我已经开始在代码库中发表一些东西,我想通过 "改变我的名字 "来保持我的作品(和帖子)的作者身份。这有可能吗?
 
Spy:
向版主或管理员提问:我可以改变我的昵称吗?我试图在MQL5注册,但结果发现我的昵称已经在那里使用了,所以我不得不用另一个昵称注册。我想在那里和这里拥有相同的昵称。当然,我也可以在这里重新注册,但我已经开始在代码库中发表一些东西,我想通过 "改变我的名字 "来保持我的作品(和帖子)的作者身份。这有可能吗?

以私人信息的形式写给罗莎。我希望你能找到她。说明问题
 

好的,谢谢你。

 

你好!在以前的MetaTrader版本上有EA,我升级了终端。在那之后,我又回到了509。因此,EA们已经在60...Bild,他们回到了他们所写的终端版本。

问题是:如何处理那些 "回来 "后就不再在策略测试器中打开交易的EA,以及那些不能再被测试的EA(策略测试器中的启动按钮根本不响应点击)?