string Smbl[];
int CntBuy[],CntSell[];
voidOnStart()
{
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); // позиций нет
}
专业人士先生,您好!不要拒绝一个编程的新人,看看代码,看看它写得是否正确。谁不是懒得去处理。我无法在策略测试器中进行测试,因为它是多货币。带有代码和指标的文件附在档案 中。
,测试该脚本。
我想写一个简单的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())。
}
}
我已经为你制定了一个单一的函数来创建符号和订单数量(未结头寸)的链接数组来买入和卖出,通过在一个演示上建立几个头寸来测试这个脚本。
谢谢你的时间,但这对我来说有点复杂,抱歉打扰了。向我解释一下什么,在哪里,如何?正如他们在手指上所说。
我从来没有使用过这种脚本的交易。
谢谢你的时间,但这对我来说有点复杂,抱歉打扰了。向我解释一下什么,在哪里,如何?正如他们在手指上所说。
我已经试过了,并在模拟账户上进行了手动交易。
如果只有错误,你是如何在模拟账户上测试的?所提出的代码无法交易。我已经在代码中添加了注释。你必须自己做所有的工作,没有知识和努力工作...你不能在证券交易所进行交易,特别是外汇。其结果将是毫不含糊的。除了上述问题,你应该使用你所选择的交易系统。2-3个月后,结果将显示出来,然后你将决定这个系统是否适合你个人和原则上的交易。
向版主或管理员提问:我可以改变我的昵称吗?我试图在MQL5注册,但结果发现我的昵称已经在那里使用了,所以我不得不用另一个昵称注册。我想在那里和这里拥有相同的昵称。当然,我也可以在这里重新注册,但我已经开始在代码库中发表一些东西,我想通过 "改变我的名字 "来保持我的作品(和帖子)的作者身份。这有可能吗?
以私人信息的形式写给罗莎。我希望你能找到她。说明问题
好的,谢谢你。
你好!在以前的MetaTrader版本上有EA,我升级了终端。在那之后,我又回到了509。因此,EA们已经在60...Bild,他们回到了他们所写的终端版本。
问题是:如何处理那些 "回来 "后就不再在策略测试器中打开交易的EA,以及那些不能再被测试的EA(策略测试器中的启动按钮根本不响应点击)?