[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 483

 
接下来,你必须删除红色箭头上的卖点,然后买入。突然间有两个订单被删除了!!!。两份订单,一份是明确设定的,另一份似乎没有!!!。好吧,让它见鬼去吧......。出现了错误129,而且没有订单。如果我一直这样让所有优秀的志愿者帮助者感到困惑,我很抱歉。
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
等等,对不起,我把单子放得满满的!"。
 
Dimka-novitsek:
接下来,你必须删除红色箭头上的卖点,然后买入。突然间有两个订单被删除了!!!。两份订单,一份是明显设定好的,另一份是似乎没有的!!。好吧,让它见鬼去吧......。出现了错误129,而且没有订单。你会原谅我让所有优秀的志愿者帮助者感到困惑......

迪姆卡--在我的私人信息中给我你的代码--我会乱来的--在我的"圣杯"被测试的时候,我没有什么事可做......和我的大脑需要锻炼......而且不要忘记放纵...
 

大家好,我是一个新手,所以请不要疯狂地踢我。积累了一些问题。

1) 我在哪里可以下载完整的历史报价。我知道MT4终端默认从MetaQuotes下载报价,但从2012年1月到2012年10月有一个缺口,重新下载时没有关闭。这就使人对整个历史产生了怀疑,从那里开始。

2)历史上有1999年以前的日期,它们的数据有些奇怪,非常少,甚至按分钟计算。有没有人把它们考虑进去或删除它们。

3)还有一些其他的胡言乱语在进行测试。我决定尝试写一个 简单的专家顾问:当Open[1]<MA1 && Close[1]>MA1时买入。在测试时,MA(指数)总是显示不同的值,这取决于初始测试日期。问题出在哪里?

 
Dimka-novitsek:

谢谢你!现在的代码更简单了。当然更简单。

谢谢你的滑翔机!

循环for (int A = 0; A <100; A++) //我们不需要这种条形搜索,它只是帮助我从日志中看到EA下单的位置正是箭头的位置或错误数字的位置。关键是在测试器中没有信号。我在同一份打印件上看到,变量arrow1和arrow2在所有条形上都只有零,这就是我摆脱困境的方法。

当然,这个周期可以从任何一个方向计算。但我又看到到处都是129号错误!我在图表中看到了指标的箭头,我想确定这些订单是由他们下的。因此,在开始时的截图中,变量箭头1和2是相等的,进一步从零开始的17条,顺序被设定--好的,超级好的!然后打印机的信息说有一个卖出的某某勾,而且进一步的条形图上的箭头是相等的 - great!!!!。

关于周期。

for (int A = 0; A <100 ; A++)

在你做事(写代码)之前,你需要对你想要得到的东西有一个明确的想法。你在每个tick 上都有这个指标,你可以对它的读数有一个完整的布局。通过这种方式(循环),你将在变量strela1和strela2中输出第100 条的读数,你可以通过这些读数进行交易(去年冬天)。:)))我一下子没注意到--你把交易操作纳入了指标读数的循环中--一个完全的P...当然,你最清楚。:)))

 
不,我需要循环看到进入/退出,也就是说,测试机器人。它是如何下订单的,它是如何犯错的。嗯,它在测试器中没有测试...
 
Dimka-novitsek:
不,我需要循环看到进入/退出,也就是说,测试机器人。它是如何下订单的,它是如何犯错的。它在测试器中没有测试...

我能说什么呢?好运!

P.S. 在我的代码中发现了一个与改变订单枚举方向有关的小错误,甚至减少了代码,并尝试在测试器中创建优化功能(自己检查)。
而且我怀疑你没有从指标中正确读出数据。该指标有几个缓冲区(在我的版本中有4个)。有些人,如那些画箭头的人--只有箭头所在的地方才有一个值。为了在这样的缓冲区中搜索信号,你需要组织一个循环(while()),其条件是返回值不等于(在我的变体EMPTY_VALUE)一个 "空 "值。在有 "无箭头 "的地方(在这些缓冲区),必须通过比较返回值和价格来寻找信号。

附加的文件:
lxvhlxyx.mq4  5 kb
 

不管是白天还是晚上都很好!有一个问题要问mt4的开发者和其他所有人。

MT客户端的最低系统要求是什么?

我想在我的旧硬件上运行它:Athlon 800mg,512mb,XP SP3。当我运行MT 4或5时,它在2秒后就关闭了。问题显然不在绞盘或硬件上,这个硬件运行的是带调试器的Visual Studio(我自己是个程序员),系统中没有出现异常(因为我的调试器不起作用)。我猜客户本身不喜欢某些东西,结果就关闭了。那么问题来了,什么是原因,什么是mt不喜欢的,真正的CPU频率?))

 
Dimka-novitsek:
等等,对不起,我把单子放得满满的!"。
迪米特里,把你的想法留给自己,在这里发表你的问题。