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

 
ToLik_SRGV:

这是正确的,我认为鲁斯塔姆暗示了这一点。

是的,我在发帖后看了一下 :)
 
谢谢大家,我这就回去工作 :)
 

我不明白为什么有全局变量

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool
b,s, 
bs,
ss,
bt,
st;
double 
bl,sl;  
//+------------------------------------------------------------------+

它们被用来打开订单

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if(bs==1&&bl==1)
{
    NewOrder1(OP_BUYLIMIT,Lot);

Today=TimeDay(TimeCurrent())
;}

return(0);}

//+------------------------------------------------------------------+
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 tic=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
if(tic<0) {Print(GetLastError());
        }else
        {
b=0;s=0;  
bs=0;
ss=0;
bt=0;
st=0;    
bl=0;sl=0; }
return(tic);}

如果一个订单的票数大于0,这个函数应该工作

else
        {
b=0;s=0; 
bs=0;
ss=0;
bt=0;
st=0;   
bl=0;sl=0; }

这应该把所有全局变量的值 改为0,并且不再打开一个新的订单。

但它却不知不觉地回到了开单状态,并在每一个新的tick上打开新的订单。

这种奇怪现象的原因是什么?

在关闭市场订单时,全局变量从这里开始设置

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()*100; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; 
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
            }
       
         }
      }

这里也是完整的专家顾问

附加的文件:
test8_2.mq4  7 kb
 
FoxUA:

人们,帮助我,我不明白......


为这些变量填充数值的块在哪里?
我想看看你的专家顾问的确切代码,以它被编译和测试的形式。
不是零碎的,因为这个问题已经存在了相当长的时间,而且已经不止一次得到了回答,但是因为这些零碎的东西,没有人能够完全理解问题的全貌。

因此,请展示整个画面,这样就不会有任何混淆了。

 
ToLik_SRGV:

为这些变量填充数值的块在哪里?
我想看看你的EA的确切代码,以它被编译和测试的形式。
不是零碎的,因为这个问题已经存在了相当长的时间,而且已经被回答了很多次,但由于这些零碎的问题,没有人能够完全理解问题的全貌。

因此,请展示整个画面,这样就不会有任何混淆了。

这里是整个Ea

附加的文件:
test8_1.mq4  7 kb
 

在 "我可以免费写一个EA "的主题中询问,并不总是得到回应?

 
diaspar:

在 "我可以免费写一个EA "的主题中询问,并不总是得到回应?

让我问你,你有多少次是免费去工作的?
这就是他们回应的频率。
 
diaspar:

在 "我可以免费写一个EA "的主题中询问,并不总是得到回应?

该话题是由话题发起人发起的。然而,他收到的请求远比他能够消化的要多。从逻辑上讲,他应该做出回应--他是要求的一方。你期待什么?
 
FoxUA:

我不知道我的EA出了什么问题,我已经尝试了所有的方法,唯一的结果是每一个tick+1个挂单,唯一的问题是当我关闭另一个市场时,一个变量会打开另一个,并在每一个tick上打开一个新的市场。

正在进行中...

最有可能的是,错误出在为这些变量填充数值的区块中(在for 循环中),我已经在那里发现了一个错误(在OrderSelect() 中),但结果还没有改变。这似乎是区块逻辑中的某个地方出现了错误。

P.S.
请改成正常符号大小写。

 
FoxUA:

当然,错误是显而易见的,它在每一个tick 上开仓,因为历史上的亏损订单没有去任何地方,所以它在每一个tick上找到它,并将控制变量的值填充为相同的值,然后开仓交易的块就会触发。

原因: