Вопросы, практика программирования на MQL5 - Страница 2
Страница 2 из 59 ПерваяПервая 1 2 3 4 5 6 12 52 ... ПоследняяПоследняя
Показано с 11 по 20 из 584

Тема: Вопросы, практика программирования на MQL5

  1. #11
    Местный Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Благодарности
    Получено: 52
    Отправлено: 77
    Ещё вопрос : не получается скомпилировать советник с ф-цией NewOrder

    Скрытый текст

    Код:
    .........
    
    int start()
      {
       
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
        NewOrder(OP_BUY,Lot);
         NewOrder(OP_SELL,Lot);
         }
    
    ...........
    
    int NewOrder(int Cmd,double Lot)
     {double TP=0; //тейкпрофит
      double SL=0; //стоплосс
     double PR=0; //Цена
     while(!IsTradeAllowed()) Sleep(100);
      if(Cmd==OP_BUY)
        {PR=Ask;
         if(TakeProfit>0) TP=Ask+TakeProfit*Point;
         if(StopLoss>0) SL=Ask-StopLoss*Point;}
      if(Cmd==OP_SELL)
        {PR=Bid;
         if(TakeProfit>0) TP=Bid-TakeProfit*Point;
         if(StopLoss>0) SL=Bid+StopLoss*Point;}
      int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,Green);
      if(tic<0) Print("Ошибка открытия ордера:" ,GetLastError());
    return(tic);}
    
    
    //±------- закрытие ордеров по рыночной цене ----------------------------------------------------------+
    void CloseOrder()
     {double PR=0;
      while(!IsTradeAllowed()) Sleep(100);
      if(OrderType()==OP_BUY)  PR=Bid;
      if(OrderType()==OP_SELL) PR=Ask;
      if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
        Print("Ошибка закрытия ордера: ",GetLastError());
    return;
    //±-----------------------------------------------------------------+
    [свернуть]


    Я так понимаю, что неправильно объявляю NewOrder. Только никак не пойму в чём ошибка!
    Помогите пожалуйста!

    Вы не можете благодарить!

  2. #12
    Денис Кириченко
    Guest
    PAZITIV, если Вы хотите, чтобы ваш советник и индикатор оценивали, то:
    1) опишите идеи, на которых они основаны;
    2) в коде откомментируйте строки;
    Например у вас в коде файла есть строки, где идёт расчёт указанного пользовательского индикатора QQEA. А где сам индикатор?

    Вы не можете благодарить!

  3. #13
    Денис Кириченко
    Guest
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    Ещё вопрос : не получается скомпилировать советник с ф-цией NewOrder

    Скрытый текст

    Код:
    .........
    
    int start()
      {
       
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
          if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
        {
        NewOrder(OP_BUY,Lot);
         NewOrder(OP_SELL,Lot);
         }
    
    ...........
    
    int NewOrder(int Cmd,double Lot)
     {double TP=0; //тейкпрофит
      double SL=0; //стоплосс
     double PR=0; //Цена
     while(!IsTradeAllowed()) Sleep(100);
      if(Cmd==OP_BUY)
        {PR=Ask;
         if(TakeProfit>0) TP=Ask+TakeProfit*Point;
         if(StopLoss>0) SL=Ask-StopLoss*Point;}
      if(Cmd==OP_SELL)
        {PR=Bid;
         if(TakeProfit>0) TP=Bid-TakeProfit*Point;
         if(StopLoss>0) SL=Bid+StopLoss*Point;}
      int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,Green);
      if(tic<0) Print("Ошибка открытия ордера:" ,GetLastError());
    return(tic);}
    
    
    //±------- закрытие ордеров по рыночной цене ----------------------------------------------------------+
    void CloseOrder()
     {double PR=0;
      while(!IsTradeAllowed()) Sleep(100);
      if(OrderType()==OP_BUY)  PR=Bid;
      if(OrderType()==OP_SELL) PR=Ask;
      if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
        Print("Ошибка закрытия ордера: ",GetLastError());
    return;
    //±-----------------------------------------------------------------+
    [свернуть]


    Я так понимаю, что неправильно объявляю NewOrder. Только никак не пойму в чём ошибка!
    Помогите пожалуйста!
    А какие вам компилятор выдаёт ошибки?

    Вы не можете благодарить!

  4. #14
    Денис Кириченко
    Guest

    пример на MQL5

    Вот вам пример вашей функции на MQL5, которая используется в скрипте. Кстати, на этой версии языка гораздо удобнее работать в Редакторе кода - MetaEditor.

    MQL5 example

    Код:
    double Lot=0.05,
    TakeProfit=75,
    StopLoss=35;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       NewOrder(ORDER_TYPE_BUY,Lot);
       NewOrder(ORDER_TYPE_SELL,Lot);
      }
    //+------------------------------------------------------------------+
    
    void NewOrder(ENUM_ORDER_TYPE Cmd,double lot)
      {
       double TP=0; //тейкпрофит
       double SL=0; //стоплосс
       double PR=0; //Цена
       while(!MQL5InfoInteger(MQL5_TRADE_ALLOWED))  
          Sleep(100);
       if(Cmd==ORDER_TYPE_BUY)
         {
          PR=SymbolInfoDouble(_Symbol,SYMBOL_ASK);;
          if(TakeProfit>0) TP=PR+TakeProfit*_Point;
          if(StopLoss>0) SL=PR-StopLoss*_Point;
         }
       if(Cmd==ORDER_TYPE_SELL)
         {
          PR=SymbolInfoDouble(_Symbol,SYMBOL_BID);
          if(TakeProfit>0) TP=PR-TakeProfit*_Point;
          if(StopLoss>0) SL=PR+StopLoss*_Point;
         }
       MqlTradeRequest request; // структура запроса
       MqlTradeResult   result;
       request.action=TRADE_ACTION_DEAL;
       request.symbol=_Symbol;
       request.volume=0.1;
       request.type= Cmd;
       request.type_filling=ORDER_FILLING_IOC;
       OrderSend(request,result);
    //--- выведем в лог ответ сервера  
       Print(__FUNCTION__,": ",result.comment," код ответа ",result.retcode);
      }
    [свернуть]


    Догадываюсь, что Вы там намудрили со скобками при проверке условия if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;, поэтому не компилируется код...ещё может неправильно употребили оператор продолжения continue...

    Вы не можете благодарить!
    Последний раз редактировалось Денис Кириченко; 23.01.2012 в 15:32.

  5. #15
    Местный Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Благодарности
    Получено: 52
    Отправлено: 77
    Цитата Сообщение от Денис Кириченко Посмотреть сообщение
    Вот вам пример вашей функции на MQL5, которая используется в скрипте. Кстати, на этой версии языка гораздо удобнее работать в Редакторе кода - MetaEditor.



    Догадываюсь, что Вы там намудрили со скобками при проверке условия if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;, поэтому не компилируется код...ещё может неправильно употребили оператор продолжения continue...
    осваиваю пока MQL4, т.к. терминал поддерживает именно его.
    Компилятор выдаёт следуйщие ошибки:


    Код индикатора

    Код:
    //+------------------------------------------------------------------+
    //|   Qualitative Quantitative Estimation Indicator for Metatrader 4 |
    //|                                     Copyright © 2006Roman Ignatov |
    //|                                   mailto:[email protected] |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 200 Roman Ignatov"
    #property link      "mailto:[email protected]"
    
    #property indicator_separate_window
    
    #property indicator_buffers 2
    
    #property indicator_color1 Red
    #property indicator_style1 STYLE_SOLID
    #property indicator_width1 2
    
    #property indicator_color2 Yellow
    #property indicator_style2 STYLE_DOT
    
    
    extern int SF = 5; // original 5
    extern int RSI_Period = 14; // original 14
    extern double DARFACTOR = 4.236; //original 4.236
    
    
    int Wilders_Period;
    int StartBar;
    
    double TrLevelSlow[];
    double AtrRsi[];
    double MaAtrRsi[];
    double Rsi[];
    double RsiMa[];
    
    int init()
    {
        Wilders_Period = RSI_Period * 2 - 1;
        if (Wilders_Period < SF)
            StartBar = SF;
        else
            StartBar = Wilders_Period;
            
        IndicatorBuffers(6);
        SetIndexBuffer(0, RsiMa);
        SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
        SetIndexLabel(0, "Value 1");
        SetIndexDrawBegin(0, StartBar);
        SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
        SetIndexBuffer(1, TrLevelSlow);
        SetIndexLabel(1, "Value 2");
        SetIndexDrawBegin(1, StartBar);
        SetIndexBuffer(2, AtrRsi);
        SetIndexBuffer(3, MaAtrRsi);
        SetIndexBuffer(4, Rsi);
        IndicatorShortName(StringConcatenate("QQEA(", SF, ")"));
        return(0);
    }
    
    
    int start()
    {
        int counted, i;
        double rsi0, rsi1, dar, tr, dv;
        
        if(Bars <= StartBar)
            return (0);
    
        counted = IndicatorCounted();
        if(counted < 1)
            for(i = Bars - StartBar; i < Bars; i++)
            {
                TrLevelSlow[i] = 0.0;
                AtrRsi[i] = 0.0;
                MaAtrRsi[i] = 0.0;
                Rsi[i] = 0.0;
                RsiMa[i] = 0.0;
            }
        
        counted = Bars - counted - 1;
            
        for (i = counted; i >= 0; i--)
            Rsi[i] = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, i);
    
        for (i = counted; i >= 0; i--)
        {
            RsiMa[i] = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
            AtrRsi[i] = MathAbs(RsiMa[i + 1] - RsiMa[i]);
        }
    
        for (i = counted; i >= 0; i--)
            MaAtrRsi[i] = iMAOnArray(AtrRsi, 0, Wilders_Period, 0, MODE_EMA, i);
    
        i = counted + 1;
        tr = TrLevelSlow[i];
        rsi1 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
        while (i > 0)
        {
            i--;
            rsi0 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
            dar = iMAOnArray(MaAtrRsi, 0, Wilders_Period, 0, MODE_EMA, i) * DARFACTOR;
    
            dv = tr;
            if (rsi0 < tr)
            {
                tr = rsi0 + dar;
                if (rsi1 < dv)
                    if (tr > dv)
                        tr = dv;
            }
            else if (rsi0 > tr)
            {
                tr = rsi0 - dar;
                if (rsi1 > dv)
                    if (tr < dv)
                        tr = dv;
            }
            TrLevelSlow[i] = tr;
            rsi1 = rsi0;
        }
        
        return(0);
    }
    [свернуть]

    со скобками вроде всё нормально, проверял через Notepad++ , там подсветка кода хорошая и показывает блоки, образованные фигурными скобками

    Вы не можете благодарить!

  6. #16
    Денис Кириченко
    Guest
    Цитата Сообщение от PAZITIV Посмотреть сообщение

    со скобками вроде всё нормально, проверял через Notepad++ , там подсветка кода хорошая и показывает блоки, образованные фигурными скобками
    Насколько можно понять, у Вас такие проблемы в коде:
    1. Это отсутствие скобки;
    2. Переменные не объявлены.

    Вы не можете благодарить!

  7. #17
    Местный Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Благодарности
    Получено: 52
    Отправлено: 77
    Цитата Сообщение от Денис Кириченко Посмотреть сообщение
    Насколько можно понять, у Вас такие проблемы в коде:
    1. Это отсутствие скобки;
    2. Переменные не объявлены.
    1) если закрыть фигурную скобку после
    int start()
    {

    if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
    {
    NewOrder(OP_BUY,Lot);
    NewOrder(OP_SELL,Lot);
    }

    }
    , то как бы закрывается ф-ция int start и компилятор ругается на все нижестоящие конструкции... или я не о той скобке говорю?!

    2) Для примера использую код советника Hedge Hog, там примерно так же объявляется ф-ция NewOrder

    Вы не можете благодарить!

  8. #18
    Местный Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Благодарности
    Получено: 52
    Отправлено: 77

    ...

    что то буксовать начал.
    пока что ещё не сильно разобрался в MQL сделал как в советнике HadgeHog -- расчёт лота исходя из риска.
    Но теперь компилятор стал ругаться на вроде бы правильные участки кода. не понимаю, в чём причина

    Код моего советника

    Код:
    //+------------------------------------------------------------------+
    //|                                                 SimpleProfit.mq4 |
    //|                                        Copyright © 2012, PAZITIV |
    //|                                                      pazitiv.net |
    //+------------------------------------------------------------------+
    
    /* 
    Cначала хотел написать советника на основе индикатора QQE Alert v3, но, разобравшись в его коде, понял,
    что он получает данные из индикатора QQEA. Так зачем же использовать костыли?! ;)
     */
    
    #property copyright "Copyright © 2012, PAZITIV"
    #property link      "pazitiv.net"
    
    
    //--- input parameters
    
    //настройки советника
    extern string info1 = "Настройки советника" ;
    extern double        LotFix=0.1;
    extern double        MaxRisk = 1;
    extern int           Avarages=3; 
    extern int           TakeProfit=10;
    extern int           StopLoss=10;
    extern int           Magic = 8888;
    
    
    extern bool Buy=true; //для открытия ордера на покупку
    extern bool Sell=true; //для открытия ордера на продажу
    
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //----
    
     
    
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
      {
      
    int SF = 5; // original 5
    int RSI_Period = 14; // original 14
    double DARFACTOR = 4.236; //original 4.236
    
    //------------ Параметры из индикатора QQEA -----------------------
    // Buffer0 -- красная жирная
    double Buffer0 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,0 , 0); 
    // Buffer1 -- жёлтый пунктир
    double Buffer1 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,1 , 0);
    //----------------------------------------------------------------- 
    
    double Lot=GetLot(MaxRisk);
    
      // открытие ордеров на Buy/Sell
      if(Lot==0) {Alert("Недостаточно средств!");return(0);}
      if (Lot !=0 && Buffer0>Buffer1 && (Buy) ) NewOrder(OP_BUY,Lot)
       else
          if (Lot!=0 && Buffer0<Buffer1 && (Sell) ) NewOrder(OP_SELL,Lot);
      // закрытие существующих ордеров Buy/Sell 
       if (Buffer0>Buffer1) CloseOrder(OrderType(OP_BUY))
          else
             if (Buffer1>Buffer0) CloseOrder(OrderType(OP_SELL));
       
    
    //  ТУТ НАЧИНАЕТ РУГАТЬСЯ НА РАСЧЁТ ЛОТА GETLOT
    
    // расчёт лота по риску
    double GetLot(int Risk)
     {double Free    =AccountFreeMargin();
      double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
      double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
      double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
      double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
      double Lot     =MathFloor( Free *MaxRisk/100/One_Lot/Step)*Step;
      if(Lot<Min_Lot) Lot=Min_Lot;
      if(Lot>Max_Lot) Lot=Max_Lot;
      if(Lot*One_Lot> Free) return(0.0);
    return(Lot);}
    
    
    
    
    
    
    int NewOrder(int Cmd,double Lot)
     {double TP=0; //тейкпрофит
      double SL=0; //стоплосс
     double PR=0; //Цена
     while(!IsTradeAllowed()) Sleep(100);
      if(Cmd==OP_BUY)
        {PR=Ask;
         if(TakeProfit>0) TP=Ask+TakeProfit*Point;
         if(StopLoss>0) SL=Ask-StopLoss*Point;}
      if(Cmd==OP_SELL)
        {PR=Bid;
         if(TakeProfit>0) TP=Bid-TakeProfit*Point;
         if(StopLoss>0) SL=Bid+StopLoss*Point;}
      int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,Green);
      if(tic<0) Print("Ошибка открытия ордера:" ,GetLastError());
    return(tic);}
    
    
    
    
    //±------- закрытие ордеров по рыночной цене ----------------------------------------------------------+
    void CloseOrder()
     {double PR=0;
      while(!IsTradeAllowed()) Sleep(100);
      if(OrderType()==OP_BUY)  PR=Bid;
      if(OrderType()==OP_SELL) PR=Ask;
      if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
        Print("Ошибка закрытия ордера: ",GetLastError());
    return;
    //±-----------------------------------------------------------------+
    
    
    //----
       return(0);
      
    //+------------------------------------------------------------------+
    [свернуть]


    Код индикатора

    Код:
    //+------------------------------------------------------------------+
    //|   Qualitative Quantitative Estimation Indicator for Metatrader 4 |
    //|                                     Copyright © 2006Roman Ignatov |
    //|                                   mailto:[email protected] |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 200 Roman Ignatov"
    #property link      "mailto:[email protected]"
    
    #property indicator_separate_window
    
    #property indicator_buffers 2
    
    #property indicator_color1 Red
    #property indicator_style1 STYLE_SOLID
    #property indicator_width1 2
    
    #property indicator_color2 Yellow
    #property indicator_style2 STYLE_DOT
    
    
    extern int SF = 5; // original 5
    extern int RSI_Period = 14; // original 14
    extern double DARFACTOR = 4.236; //original 4.236
    
    
    int Wilders_Period;
    int StartBar;
    
    double TrLevelSlow[];
    double AtrRsi[];
    double MaAtrRsi[];
    double Rsi[];
    double RsiMa[];
    
    int init()
    {
        Wilders_Period = RSI_Period * 2 - 1;
        if (Wilders_Period < SF)
            StartBar = SF;
        else
            StartBar = Wilders_Period;
            
        IndicatorBuffers(6);
        SetIndexBuffer(0, RsiMa);
        SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
        SetIndexLabel(0, "Value 1");
        SetIndexDrawBegin(0, StartBar);
        SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
        SetIndexBuffer(1, TrLevelSlow);
        SetIndexLabel(1, "Value 2");
        SetIndexDrawBegin(1, StartBar);
        SetIndexBuffer(2, AtrRsi);
        SetIndexBuffer(3, MaAtrRsi);
        SetIndexBuffer(4, Rsi);
        IndicatorShortName(StringConcatenate("QQEA(", SF, ")"));
        return(0);
    }
    
    
    int start()
    {
        int counted, i;
        double rsi0, rsi1, dar, tr, dv;
        
        if(Bars <= StartBar)
            return (0);
    
        counted = IndicatorCounted();
        if(counted < 1)
            for(i = Bars - StartBar; i < Bars; i++)
            {
                TrLevelSlow[i] = 0.0;
                AtrRsi[i] = 0.0;
                MaAtrRsi[i] = 0.0;
                Rsi[i] = 0.0;
                RsiMa[i] = 0.0;
            }
        
        counted = Bars - counted - 1;
            
        for (i = counted; i >= 0; i--)
            Rsi[i] = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, i);
    
        for (i = counted; i >= 0; i--)
        {
            RsiMa[i] = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
            AtrRsi[i] = MathAbs(RsiMa[i + 1] - RsiMa[i]);
        }
    
        for (i = counted; i >= 0; i--)
            MaAtrRsi[i] = iMAOnArray(AtrRsi, 0, Wilders_Period, 0, MODE_EMA, i);
    
        i = counted + 1;
        tr = TrLevelSlow[i];
        rsi1 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
        while (i > 0)
        {
            i--;
            rsi0 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
            dar = iMAOnArray(MaAtrRsi, 0, Wilders_Period, 0, MODE_EMA, i) * DARFACTOR;
    
            dv = tr;
            if (rsi0 < tr)
            {
                tr = rsi0 + dar;
                if (rsi1 < dv)
                    if (tr > dv)
                        tr = dv;
            }
            else if (rsi0 > tr)
            {
                tr = rsi0 - dar;
                if (rsi1 > dv)
                    if (tr < dv)
                        tr = dv;
            }
            TrLevelSlow[i] = tr;
            rsi1 = rsi0;
        }
        
        return(0);
    }
    [свернуть]

    код советника HedgeHog

    Код:
    //+------------------------------------------------------------------+
    //|                                                      expert1.mq4 |
    //|                      Copyright © 2009, MetaQuotes Software Corp. |
    //|                                        http://www.metaquotes.net |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2009, MetaQuotes Software Corp."
    #property link      "http://www.metaquotes.net"
    extern int  MaxRisk=2;
    extern int  TakeProfit=14;
    extern int  StopLoss=0;
    extern int  StartTime=0;
    int Today=0;
    int Type=0;
    double newLot=0;
    //+------------------------------------------------------------------+
    int init() {return(0);}
    //+------------------------------------------------------------------+
    int deinit() {return(0);}
    //+------------------------------------------------------------------+
    int start()
    {if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем
     if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят
     int Count=0;
    //…подсчитаем количество ордеров и закроем их через 48 часов
     for(int i=OrdersTotal()-1;i>=0;i--)
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {if(TimeCurrent()-OrderOpenTime()>=48*60*60)
            {newLot=OrderLots();Type=OrderType();CloseOrder();}
          Count++;}
    //…откроем ордера в StartTime если нет открытых и сегодня не торговали
     double Lot=GetLot(MaxRisk);
     if(Lot==0) {Alert("Недостаточно средств!");return(0);}
     if(TimeHour(TimeCurrent())==StartTime && Today!=TimeDay(TimeCurrent()) && Count==0)
       {if(newLot>0)
          {if(Type==OP_BUY) {NewOrder(OP_BUY,newLot*2); NewOrder(OP_SELL,newLot);}
           if(Type==OP_SELL){NewOrder(OP_SELL,newLot*2);NewOrder(OP_BUY,newLot);}}
        if(newLot==0)
          {NewOrder(OP_BUY,Lot);
           NewOrder(OP_SELL,Lot);}
        Today=TimeDay(TimeCurrent());
        newLot=0;}
    return(0);}
    //+------------------------------------------------------------------+
    double GetLot(int Risk)
    {double Free    =AccountFreeMargin();
     double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
     double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
     double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
     double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
     double Lot     =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
     if(Lot<Min_Lot) Lot=Min_Lot;
     if(Lot>Max_Lot) Lot=Max_Lot;
     if(Lot*One_Lot>Free) return(0.0);
    return(Lot);}
    //+------------------------------------------------------------------+
    int NewOrder(int Cmd,double Lot)
    {double TP=0; //тейкпрофит
     double SL=0; //стоплосс
     double PR=0; //Цена
     while(!IsTradeAllowed()) Sleep(100);
     if(Cmd==OP_BUY)
       {PR=Ask;
        if(TakeProfit>0) TP=Ask+TakeProfit*Point;
        if(StopLoss>0) SL=Ask-StopLoss*Point;}
     if(Cmd==OP_SELL)
       {PR=Bid;
        if(TakeProfit>0) TP=Bid-TakeProfit*Point;
        if(StopLoss>0) SL=Bid+StopLoss*Point;}
     int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
     if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
    return(tic);}
    //+------------------------------------------------------------------+
    void CloseOrder()
    {double PR=0;
     while(!IsTradeAllowed()) Sleep(100);
     if(OrderType()==OP_BUY)  PR=Bid;
     if(OrderType()==OP_SELL) PR=Ask;
     if(!OrderClose(OrderTicket(),OrderLots(),PR,3,CLR_NONE))
       Print("Ошибка закрытия ордера: ",GetLastError());
    return;}
    //+------------------------------------------------------------------+
    [свернуть]


    для использования ф-ции iCustom() использую вот этот пример
    _http://book.mql4.com/ru/samples/shared
    код примера не влезает в сообщ. так что просмотр только по ссылке

    Вы не можете благодарить!
    Последний раз редактировалось PAZITIV; 24.01.2012 в 01:04.

  9. #19
    Денис Кириченко
    Guest
    Цитата Сообщение от PAZITIV Посмотреть сообщение
    что то буксовать начал.
    пока что ещё не сильно разобрался в MQL...
    Почитайте пож-ста про операторы и объявление переменных.

    Вы не можете благодарить!

  10. #20
    Местный Аватар для PAZITIV
    Регистрация
    20.12.2011
    Адрес
    47°57′16.04″ с. ш. 33°25′22.28″ в. д
    Сообщений
    1,472
    Благодарности
    Получено: 52
    Отправлено: 77
    Цитата Сообщение от Денис Кириченко Посмотреть сообщение
    Почитайте пож-ста про операторы и объявление переменных.
    спасибо, с этим вроде как разобрался.

    требуется помощь в другом
    нужно, при определённых условиях, одновременно открывать Buy и закрывать Sell (если ордер Sell есть) и наоборот

    Код:
    if(Lot==0) 
       {
        Alert("Недостаточно средств!");
         return(0);
        } 
     // if (Buffer0 == Buffer1)  // если линии пересеклись и
        if (Lot!=0 && Buffer0>Buffer1) // если поступил сигнал на покупку
          {
           NewOrder(OP_BUY,Lot);
           }
          
        else
         // if (Buffer0 == Buffer1) // если линии пересеклись и
          if (Lot!= 0 && Buffer0<Buffer1) // если поступил сигнал на продажу
          {
           NewOrder(OP_SELL,Lot);
          }
      return(0);
         }
    для закрытия ордеров планирую использовать ф-цию
    Код:
    void CloseOrder()
     {double PR=0;
      while(!IsTradeAllowed()) Sleep(100);
      if(OrderType()==OP_BUY)  PR=Bid;
      if(OrderType()==OP_SELL) PR=Ask;
      if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
        Print("Ошибка закрытия ордера: " ,GetLastError());
    return;}
    в сети нашёл только одновременное отркрытие обоиз типов ордеров

    Вы не можете благодарить!

Страница 2 из 59 ПерваяПервая 1 2 3 4 5 6 12 52 ... ПоследняяПоследняя

Похожие темы

  1. Основы программирования в cAlgo
    от Azizkin в разделе Торговая платформа cTrader
    Ответов: 27
    Последнее сообщение: 26.10.2016, 13:59
  2. Вопросы по вебинару "Программирование на языке MQL5"
    от Денис Кириченко в разделе Программирование на MQL
    Ответов: 15
    Последнее сообщение: 11.04.2016, 18:46
  3. Вопросы по вебинару "Эффективное программирование советников в MQL5"
    от Денис Кириченко в разделе Программирование на MQL
    Ответов: 20
    Последнее сообщение: 05.08.2014, 17:47
  4. Вводный курс MQL5 программирования
    от Денис Кириченко в разделе Разное
    Ответов: 48
    Последнее сообщение: 01.12.2013, 15:56
  5. Ответов: 8
    Последнее сообщение: 11.10.2013, 12:16

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •