← К каталогу
Исходный код · ID 54

dope.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Советник для MetaTrader 4, предназначенный для автоматической торговли на основе анализа исторических данных и свечных паттернов. Читает данные из файлов истории платформы (.hst), анализирует текущие и предыдущие бары для формирования торговых сигналов. Поддерживает как рыночные, так и отложенные ордера с возможностью управления рисками.

Настройки программы

НастройкаОписание
MagicID Идентификатор магии — Уникальный номер для идентификации ордеров советника на сервере и в терминале.
LOTS Размер лота — Фиксированный размер лота для открытия сделок, используется при нулевом значении параметра риска.
risk: 0-->fixed lots (risk) Риск в процентах — Процент от свободного капитала для расчёта размера лота; при нулевом значении используется фиксированный лот.
SL Стоп-лосс — Размер стоп-лосса в пунктах от цены входа для ордеров на покупку и продажу.
TP Тейк-профит — Размер тейк-профита в пунктах от цены входа для ордеров на покупку и продажу.
Trailing Трейлинг-стоп — Включение или выключение функции трейлинга стоп-лосса по мере движения цены в прибыльную сторону.
TrailingExtra Дополнительный трейлинг — Дополнительное смещение трейлинг-стопа в пунктах от текущей цены для увеличения защиты прибыли.
Получить полный код

Поиск по коду файла

#property version   "V8.00"
  #property strict

  #include <stderror.mqh>
  #include <stdlib.mqh>

  #import   "kernel32.dll"
  int CreateFileW(string Filename,int AccessMode,int ShareMode,int PassAsZero,int CreationMode,int FlagsAndAttributes,int AlsoPassAsZero);
  int GetFileSize(int FileHandle,int PassAsZero);
  int SetFilePointer(int FileHandle,int Distance,int &PassAsZero[],int FromPosition);
  int ReadFile(int FileHandle,uchar &BufferPtr[],int BufferLength,int  &BytesRead[],int PassAsZero);
  int CloseHandle(int FileHandle);
  #import

  string Ordercomment="";
  int Slippage=3;

  int    Retries=10;

  bool   AutoTrade=true;

  bool   ecnBroker=false;

  input int MagicID=12345678;
  input double LOTS=0.01;
  input int risk=40;//risk: 0-->fixed lots
  input double SL=50;
  input double TP=100;
  extern bool Trailing = true;
  extern double TrailingExtra = 50.0;

  union Price
    {
     uchar             buffer[8];
     double            close;
    };

  double data[][2];

  int BytesToRead;
  string    datapath;
  string    result;
  Price     m_price;

  double g_Point;
  int    ticket=0;

  int OnInit()
    {
      // код доступен только после оплаты
   }

  void OnDeinit(const int reason)
    {
     ObjectsDeleteAll();
     ChartRedraw();
    }

  void OnTick()
    {
      // код доступен только после оплаты
   }

  void ReadFileHst(string FileName)
    {
     int       j=0;;
     string    strFileContents;
     int       Handle;
     int       LogFileSize;
     int       movehigh[1]= {0};
     uchar     buffer[];
     int       nNumberOfBytesToRead;
     int       read[1]= {0};
     int       i;
     double    mm;

     strFileContents="";
     Handle=CreateFileW(FileName,(int)0x80000000,3,0,3,0,0);

     if(Handle==-1)
       {
        Comment("");
        return;
       }
     LogFileSize=GetFileSize(Handle,0);

     if(LogFileSize<=0)
       {
        return;
       }

     if((LogFileSize-148)/60==BytesToRead)
       {
        return;
       }
     SetFilePointer(Handle,148,movehigh,0);
     BytesToRead=(LogFileSize-148)/60;
     ArrayResize(data,BytesToRead,0);
     nNumberOfBytesToRead=60;
     ArrayResize(buffer,60,0);
     for(i=0; i<BytesToRead; i=i+1)

       {
        ReadFile(Handle,buffer,nNumberOfBytesToRead,read,NULL);
        if(read[0]==nNumberOfBytesToRead)
          {
           result=StringFormat("0x%02x%02x%02x%02x%02x%02x%02x%02x",buffer[7],buffer[6],buffer[5],buffer[4],buffer[3],buffer[2],buffer[1],buffer[0]);

           m_price.buffer[0] = buffer[32];
           m_price.buffer[1] = buffer[33];
           m_price.buffer[2] = buffer[34];
           m_price.buffer[3] = buffer[35];
           m_price.buffer[4] = buffer[36];
           m_price.buffer[5] = buffer[37];
           m_price.buffer[6] = buffer[38];
           m_price.buffer[7] = buffer[39];
           mm=m_price.close;
           data[j][0] = StringToDouble(result);
           data[j][1] = mm;
           j=j+1;
           strFileContents=TimeToString(StringToTime(result),3)+" "+DoubleToString(mm,8);
          }
        else
          {
           CloseHandle(Handle);
           return;
          }
       }
     CloseHandle(Handle);
     strFileContents=DoubleToString(data[j-1][0],3)+" "+DoubleToString(data[j-1][1],8)+" "+DoubleToString(data[j-2][1],3)+" "+DoubleToString(data[j-2][1],8);
     result=strFileContents;
    }

  int fnGetLotDigit()
    {
     double l_LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
     if(l_LotStep == 1)
        return(0);
     if(l_LotStep == 0.1)
        return(1);
     if(l_LotStep == 0.01)
        return(2);
     if(l_LotStep == 0.001)
        return(3);
     if(l_LotStep == 0.0001)
        return(4);
     return(1);
    }

  int CheckBuyOrders(int magic)
    {
     int op=0;

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

       {
        int status=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()!=magic)
           continue;
        if(OrderSymbol()==Symbol())
          {
           if(OrderType()==OP_BUY)
             {
              op++;
              break;
             }
          }
       }
     return(op);
    }

  int CheckSellOrders(int magic)
    {
     int op=0;

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

       {
        int status=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()!=magic)
           continue;
        if(OrderSymbol()==Symbol())
          {
           if(OrderType()==OP_SELL)
             {
              op++;
              break;
             }
          }
       }
     return(op);
    }

  int CheckTotalBuyOrders(int magic)
    {
     int op=0;

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

       {
        int status=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()!=magic)
           continue;
        if(OrderSymbol()==Symbol())
          {
           if(OrderType()==OP_BUY)
             {
              op++;
             }
          }
       }
     return(op);
    }

  int CheckTotalSellOrders(int magic)
    {
     int op=0;

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

       {
        int status=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()!=magic)
           continue;
        if(OrderSymbol()==Symbol())
          {
           if(OrderType()==OP_SELL)
             {
              op++;
             }
          }
       }
     return(op);
    }

  int CheckMarketSellOrders()
    {
     int op=0;

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

       {
        int status=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()!=MagicID)
           continue;
        if(OrderSymbol()==Symbol())
          {
           if(OrderType()==OP_SELL)
             {
              op++;
             }
          }
       }
     return(op);
    }

  int CheckMarketBuyOrders()
    {
     int op=0;

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

       {
        int status=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()!=MagicID)
           continue;
        if(OrderSymbol()==Symbol())
          {
           if(OrderType()==OP_BUY)
             {
              op++;
             }
          }
       }
     return(op);
    }

  bool MainOrders(int a_cmd_0,double price_24,double price_TP,double price_SL)
    {
     color color_8=Black;
     int bClosed;
     int nAttemptsLeft=Retries;
     int cmd=0;

     if(a_cmd_0 ==OP_BUY||a_cmd_0 ==OP_BUYSTOP)
        cmd=0;
     if(a_cmd_0 ==OP_SELL||a_cmd_0 ==OP_SELLSTOP)
        cmd=1;

     if(a_cmd_0==OP_BUYLIMIT || a_cmd_0==OP_BUY)
       {
        color_8=Blue;
       }
     else
       {

        if(a_cmd_0==OP_SELLLIMIT || a_cmd_0==OP_SELL)
          {
           color_8=Red;
          }
       }

     double lots_32=NormalizeDouble(LOTS,fnGetLotDigit());

     if(lots_32==0.0)
        return(false);

     double gd_532 = MarketInfo(Symbol(), MODE_MAXLOT);
     double gd_540 = MarketInfo(Symbol(), MODE_MINLOT);

     if(lots_32 > gd_532)
        lots_32 = gd_532;
     if(lots_32 < gd_540)
        lots_32 = gd_540;

     bClosed=false;

     while((bClosed==false) && (nAttemptsLeft>=0))
       {
        nAttemptsLeft--;
        RefreshRates();

        if(!ecnBroker)
           bClosed=OrderSend(Symbol(),a_cmd_0,lots_32,price_24,Slippage,price_SL,price_TP,Ordercomment,MagicID,0,color_8);
        else
           bClosed=OrderSend(Symbol(),a_cmd_0,lots_32,price_24,Slippage,0,0,Ordercomment,MagicID,0,color_8);

        if(bClosed<=0)
          {
           int nErrResult=GetLastError();

           if(a_cmd_0==0)
             {
              Print("FX EA Open New Buy FAILED : Error "+IntegerToString(nErrResult)+" ["+ErrorDescription(nErrResult)+".]");
              Print(IntegerToString(a_cmd_0)+" "+DoubleToString(lots_32,2)+" "+DoubleToString(price_24,Digits));
             }
           else
             {
              if(a_cmd_0==1)
                {
                 Print("FX EA Open New Se

Показано первые 50% кода (символов: 13837)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 383,70₽ ≈ $16.91