Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что в MQL5 появилась обработка событий?
nov123
32
nov123 2013.01.17 05:56 

Здравствуйте, я не давно начал работать с mql4, написал код а он не торгует помогите найти ошибку.

 

 

#property copyright "TO"
#property link      "http://www.forex-tradexperts-to.narod.ru"

#include <WinUser32.mqh>

extern int TP_Fract_3=300;
extern int SL_Fract_3=200;
extern int TP_Fract_11=500;
extern int SL_Fract_11=300;
extern bool buy_Fract_3=true;
extern bool sell_Fract_3=true;
extern bool buy_Fract_11=true;
extern bool sell_Fract_11=true;
extern bool podtvergdenie=false;
extern int tofract=10;
extern double lots=0.1;
extern int ID = 5452;

string com;
double spread;

int init()
{
   com=DoubleToStr(ID,0);
   spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;     
   return(0);
}

int deinit()
{
   return(0);
}

datetime t1,t2=0;

bool order(double price,int type,string c,int m)
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)return(false);
      if(i==0)return(true);
   }
  
   if(OrdersTotal()==0)return(true);
}

int start()
  {
   int i,ret;
  
   t1=Time[0];
  
   if(t1!=t2)
   {     
      int fract_sell_3=iHighest(Symbol(), Period(),MODE_HIGH,5,1);
      int fract_buy_3=iLowest(Symbol(), Period(),MODE_LOW,5,1);
      int fract_sell_11=iHighest(Symbol(), Period(),MODE_HIGH,21,1);
      int fract_buy_11=iLowest(Symbol(), Period(),MODE_LOW,21,1);           
     
      if( fract_sell_3==3 && sell_Fract_3==true)
      {
         if(OrdersTotal()==0)if(order(High[fract_sell_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_SELLLIMIT,lots,High[fract_sell_3]+tofract*Point+spread,10,High[fract_sell_3]+tofract*Point-SL_Fract_3*Point,High[fract_sell_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);
        
         for(i=OrdersTotal()-1;i>=0;i--)
         {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)
            {
               OrderModify(OrderTicket(),High[fract_sell_3]+tofract*Point+spread, High[fract_sell_3]+tofract*Point-SL_Fract_3*Point, High[fract_sell_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);
               break;
            }
            if(i==0)if(order(High[fract_sell_3]+tofract*Point+spread,4,com,5))
            {
               if(podtvergdenie)
               {
                  ret=MessageBox("Сигнал на "+Symbol()+" H1 SELLLIMIT "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);
                  if(ret==IDYES)OrderSend(Symbol(),OP_SELLLIMIT,lots,High[fract_sell_3]+tofract*Point+spread,10,High[fract_sell_3]+tofract*Point-SL_Fract_3*Point,High[fract_sell_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);
               }
               if(!podtvergdenie)OrderSend(Symbol(),OP_SELLLIMIT,lots,High[fract_sell_3]+tofract*Point+spread,10,High[fract_sell_3]+tofract*Point-SL_Fract_3*Point,High[fract_sell_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);
            }
         }     
      }
     
      if( fract_buy_3==3  && buy_Fract_3==true)
      {
         if(OrdersTotal()==0)if(order(Low[fract_buy_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_BUYLIMIT,lots,Low[fract_buy_3]-tofract*Point,10,Low[fract_buy_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_buy_3]-tofract*Point-TP_Fract_3*Point,com,5);
        
         for(i=OrdersTotal()-1;i>=0;i--)
         {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)
            {
               OrderModify(OrderTicket(),Low[fract_buy_3]-tofract*Point,Low[fract_buy_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_buy_3]-tofract*Point-TP_Fract_3*Point,0,Red);
               break;
            }
            if(i==0)if(order(Low[fract_buy_3]-tofract*Point,5,com,5))
            {
               if(podtvergdenie)
               {
                  ret=MessageBox("Сигнал на "+Symbol()+" H1 BUYLIMIT "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);
                  if(ret==IDYES)OrderSend(Symbol(),OP_BUYLIMIT,lots,Low[fract_buy_3]-tofract*Point,10,Low[fract_buy_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_buy_3]-tofract*Point-TP_Fract_3*Point,com,5);
               }
               if(!podtvergdenie)OrderSend(Symbol(),OP_BUYLIMIT,lots,Low[fract_buy_3]-tofract*Point,10,Low[fract_buy_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_buy_3]-tofract*Point-TP_Fract_3*Point,com,5);
            }
         }     
      }
     
      if( fract_sell_11==11  && sell_Fract_11==true)
      {
         if(OrdersTotal()==0)if(order(High[fract_sell_11]+tofract*Point+spread,4,com,21))OrderSend(Symbol(),OP_SELLLIMIT,lots,High[fract_sell_11]+tofract*Point+spread,10,High[fract_sell_11]+tofract*Point-SL_Fract_11*Point,High[fract_sell_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);
        
         for(i=OrdersTotal()-1;i>=0;i--)
         {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)
            {
               OrderModify(OrderTicket(),High[fract_sell_11]+tofract*Point+spread, High[fract_sell_11]+tofract*Point-SL_Fract_11*Point, High[fract_sell_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue);
               break;
            }
            if(i==0)if(order(High[fract_sell_11]+tofract*Point+spread,4,com,21))
            {  
               if(podtvergdenie)
               {
                  ret=MessageBox("Сигнал на "+Symbol()+" H4 SELLLIMIT "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);
                  if(ret==IDYES)OrderSend(Symbol(),OP_SELLLIMIT,lots,High[fract_sell_11]+tofract*Point+spread,10,High[fract_sell_11]+tofract*Point-SL_Fract_11*Point,High[fract_sell_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);
               }
               if(!podtvergdenie)OrderSend(Symbol(),OP_SELLLIMIT,lots,High[fract_sell_11]+tofract*Point+spread,10,High[fract_sell_11]+tofract*Point-SL_Fract_11*Point,High[fract_sell_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);
            }
         }     
      }
     
      if( fract_buy_11==11  && buy_Fract_11==true)
      {
         if(OrdersTotal()==0)if(order(Low[fract_buy_11]-tofract*Point,5,com,21))OrderSend(Symbol(),OP_BUYLIMIT,lots,Low[fract_buy_11]-tofract*Point,10,Low[fract_buy_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_buy_11]-tofract*Point-TP_Fract_11*Point,com,21);
        
         for(i=OrdersTotal()-1;i>=0;i--)
         {
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)
            {
               OrderModify(OrderTicket(),Low[fract_buy_11]-tofract*Point,Low[fract_buy_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_buy_11]-tofract*Point-TP_Fract_11*Point,0,Red);
               break;
            }
            if(i==0)if(order(Low[fract_buy_11]-tofract*Point,5,com,21))
            {  
               if(podtvergdenie)
               {
                  ret=MessageBox("Сигнал на "+Symbol()+" H4 SELLLIMIT "+"\nУстановить ордер?", "Signal", MB_YESNO|MB_ICONQUESTION);
                  if(ret==IDYES)OrderSend(Symbol(),OP_BUYLIMIT,lots,Low[fract_buy_11]-tofract*Point,10,Low[fract_buy_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_buy_11]-tofract*Point-TP_Fract_11*Point,com,21);
               }
               if(!podtvergdenie)OrderSend(Symbol(),OP_BUYLIMIT,lots,Low[fract_buy_11]-tofract*Point,10,Low[fract_buy_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_buy_11]-tofract*Point-TP_Fract_11*Point,com,21);
            }
         }     
      }
     
     
      t2=Time[0];
  
   }
   return(0);
  } 

Mikhail Kozhemyako
1164
Mikhail Kozhemyako 2013.01.17 06:49  
nov123:

Здравствуйте, я не давно начал работать с mql4, написал код а он не торгует помогите найти ошибку.


 У Вас в журнале выдает ошибку типа  2013.01.17 10:41:37 2012.11.30 04:00 test EURUSD,H1: OrderSend error 130. Ненормализованные OrderOpenPrice, StopLoss, TakeProfit. Перед каждым OrderSend используйте для цены открытия, стоплосса и тейкпрофита функцию NormalizeDouble(ЦенаОткрытия или Стоплосс или ТейкПрофит,Digits);
Константин
66
Константин 2013.01.17 07:01  
У Вас не правильно вычисляются стоп уровни, СтопЛосс и ТейкПрофит выставляются в одну сторону, что при Селл,что при Бай. Для СеллЛимит у Вас Профит получается отрицательный для ордера(т.е. профит хотите с убытком). Для БайЛимита не смотрел.
Mikhail Kozhemyako
1164
Mikhail Kozhemyako 2013.01.17 07:17  
dualbit:
У Вас не правильно вычисляются стоп уровни, СтопЛосс и ТейкПрофит выставляются в одну сторону, что при Селл,что при Бай. Для СеллЛимит у Вас Профит получается отрицательный для ордера(т.е. профит хотите с убытком). Для БайЛимита не смотрел.

Тем более и это...
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий