Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 255

 
Mihail Matkovskij #:

Как вы вычисляете tp?

указываю в переменной double tp=50;

 
Roman Epifanov #:

указываю в переменной double tp=50;

double takeProfit;
takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
 
Mihail Matkovskij #:

теперь пишет

2021.12.04 13:56:09.509 TestGenerator: unmatched data error (high value 1.13110 at 2021.12.03 23:45 is not reached from the least timeframe, high price 1.13104 mismatches)


//+------------------------------------------------------------------+
//|                                                         repa.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   tp = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   double lot=0.01;
   while (i<OrdersTotal())
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней
   if (Close[0]<ema)trend=true ;else if(Close[0]>ema)trend=false; //определили тренд
   
   if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,tp,"Candle sell, Close[0]<MA");};
   
   
  }
//+------------------------------------------------------------------+
 
Mihail Matkovskij #:

поставил на минутку.. работает..

но уровень стопа другой -

1 2021.09.16 05:59 sell 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00


 
Roman Epifanov #:

теперь пишет

2021.12.04 13:56:09.509 TestGenerator: unmatched data error (high value 1.13110 at 2021.12.03 23:45 is not reached from the least timeframe, high price 1.13104 mismatches)


void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   double stopLoss, takeProfit, openPrice;
   double lot=0.01;
   while (i<OrdersTotal())
   {
     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
     lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней

   if (Close[0]<ema)
     trend=true ;
   else if(Close[0]>ema)
     trend=false; //определили тренд
    
   takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell
   openPrice = NormalizeDouble(Bid, Digits());

   if (Close[1]<Open[1]) {
     OrderSend(Symbol(), OP_SELL, lot, openPrice, 2, stopLoss, takeProfit, "Candle sell, Close[0]<MA");
   }
   
  }

Правил всё онлайн, так что сам проверяйте.

 
Mihail Matkovskij #:

Правил всё онлайн, так что сам проверяйте.

Спасибо!

 

Добрый вечер господа, подскажите пожалуйста почему советник при открытии второго ордера выдает ошибку?


сам текст советника



//+----------------------Параметры-----------------------------------+

input int TakeProfit = 100;    // Прибыль в пунктах

input int StopLoss = 50;       // Убыток в пунктах

input double Lot = 0.01;       // Стартовый лот

input double Multilot = 1.95;     // Множитель стартового лота

input int Slippage =30;        // Проскальзывание

input int MagicNumber = 333 ;  // Уникальный номер


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

double tp=0;

double sl=0;

int OnInit()

  {

   tp=NormalizeDouble(TakeProfit*Point(),Digits());

   sl=NormalizeDouble(StopLoss*Point(),Digits());

   return(INIT_SUCCEEDED);

  }


//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//--цикл проверяет есть ли открытые ордера при включении советника и подсчитывает их.

   int buy=0;  //Количество ордеров BUY

   int sell=0; //Количество ордеров SELL


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

      if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

         if(OrderSymbol()==Symbol())

            if(OrderMagicNumber()== MagicNumber)

              {

               if(OrderType()==OP_BUY)

                  buy++;

               if(OrderType()==OP_SELL)

                  sell++;

              }


//--цикл получает данные последнего закрытого ордера при включении советника

   int type=-1;              //Тип закрытого ордера

   int history_close_orders=0; //Количество закрытых ордеров

   double lot=0;             //Лот последнего закрытого ордера

   double profit =0;         //Профит с которым закрылся последний ордер

   datetime time=0;          //Время закрытия последнего ордера


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

      if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))

         if(OrderSymbol()==Symbol())

            if(OrderMagicNumber()== MagicNumber)

               if(OrderCloseTime()>time)

                 {

                  history_close_orders++;

                  time = OrderCloseTime();//время закрытия последнего ордера

                  lot = OrderLots();// Лот последнего закрытого ордера

                  type= OrderType();// Тип последнего закрытого ордера

                  profit=OrderProfit()*OrderSwap()*OrderCommission();//Результат закрытого ордера

                 }

// Расчитываем лот с которым будет работать советник

   double Lots_Work=0;// рабочий лот


   if(history_close_orders==0 || profit>0)// если нет закрытых ордеров, или последний ордер закрылся в плюс

      Lots_Work=Lot;// рабочий лот равняется начальному лоту


   if(history_close_orders>0 && profit<0) // если последний ордер закрылся в минус

      Lots_Work=1;//рабочий лот будет равен лот последнего ордера умноженного на множитель


// Открытие первого ордера на покупку

   if(buy==0 || profit>0)

     {

      int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrGreen);

      if(ticket<0)

         Print("OrderSend завершилась с ошибкой #",GetLastError());

      else

         Print("Функция OrderSend успешно выполнена");

     }


// Открытие второго и последующих ордеров на покупку

   if(buy==0  && type==OP_BUY && profit<0)

     {

      int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrGreen);

      if(ticket<0)

         Print("OrderSend завершилась с ошибкой #",GetLastError());

      else

         Print("Функция OrderSend успешно выполнена");

     }


// Открытие первого ордера на продажу

   if(sell==0 || profit>0)

     {

      int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrRed);

      if(ticket<0)

         Print("OrderSend завершилась с ошибкой #",GetLastError());

      else

         Print("Функция OrderSend успешно выполнена");

     }

// Открытие второго и последующих ордеров на покупку

   if(sell==0  && (type==OP_SELL && profit<0))

     {

      int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0,"Советник Test fair",MagicNumber,0,clrRed);

      if(ticket<0)

         Print("OrderSend завершилась с ошибкой #",GetLastError());

      else

         Print("Функция OrderSend успешно выполнена");

     }


//--Модифицируем ордер дрбавляя тейк профит и стоп лосс

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

      if(OrderSelect(i, SELECT_BY_POS))

         if(OrderSymbol()==Symbol())

            if(OrderMagicNumber()== MagicNumber)

              {

               if(OrderType()==OP_BUY)

                 {

                  if(OrderStopLoss()==0 || OrderTakeProfit()==0)

                     if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits()),NormalizeDouble(OrderOpenPrice()+tp,Digits()),0,clrGreen))

                        Print("OrderModify  OK!");

                     else

                        Print("OrderModify BUY завершилась с ошибкой #", GetLastError());

                 }

               if(OrderType()==OP_SELL)

                 {

                  if(OrderStopLoss()==0 || OrderTakeProfit()==0)

                     if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits()),NormalizeDouble(OrderOpenPrice()-tp,Digits()),0,clrRed))

                        Print("OrderModify  OK!");

                     else

                        Print("OrderModify SELL завершилась с ошибкой #", GetLastError());

                 }

              }


  }

//+------------------------------------------------------------------+


 
На старом ноуте с процессором i3 до сих пор был установлен WinXP 32 бит, не поддерживаемый МТ5. Недавно увеличил память до 6 Гб, хочу установить 64 бит ОС, в которой бы работали МТ4 и МТ5. Что предпочтительней - Win7 или Win8.1 ?
 
atztek #:
На старом ноуте с процессором i3 до сих пор был установлен WinXP 32 бит, не поддерживаемый МТ5. Недавно увеличил память до 6 Гб, хочу установить 64 бит ОС, в которой бы работали МТ4 и МТ5. Что предпочтительней - Win7 или Win8.1 ?

10

 
Andrey Sokolov #:

10

Эта версия установлена на новом ноуте, надоела постоянными обновлениями. К тому же люди пишут что восьмерка бежит лучше десятки на старых ноутах. Я бы на старом оставил WinXP, но МТ5 на ней не бежит, да и 3Гб памяти, больше которой ХР не видит, уже маловато. Все же, если выбор между 7 и 8.1, что лучше для проведения оптимизаций на МТ4/5 ?
Причина обращения: