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

 
Vitalie Postolache:


То же самое скажу. С логикой не дружите. В чём проблема рассчитать сразу начальный лот, исходя из свободных средств и значения риска (вроде писалось про 3%)? Зачем так через одно место всё делать?

Берёте значение свободной маржи, умножаете на риск, делите на 100 и на значение залога для 1 лота - вот простейшая формула для расчёта лота с указанным процентом от свободной маржи. Ну ещё  шаго изменения лота надо учесть и предотвратить выход за пределы мин-макс лота, разрешённого ДЦ:


Я же говорю советник торгует в небольшом промежутке времени в котором есть вероятность что откроется 9 ордеров поочередно противоположных перекрывающих друг друга и каждый следующий умножается на 2, поэтому маржа может не выдеражать и последний отложенный ордер может не открыться, по этому и надо расчитать с последнего максимально возможного лота. Я посчитал что самое оптимально число ордеров за промежуток в 5-10 мин 9 ордеров .В общем мне нужно расчитать маржу на случай если все ордера откроются и исходя из полученных данных в обратном порядке расчитать первый лот.

 
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//---- 
if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     
        
    }
    
//-----     
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//-----ззакртыие ордеров
for (int i=1; i<=OrdersTotal(); i++)       
     {                                        
      if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
        {                                     
         if(r < 50 && p < m)
         {
             OrderClose(ticketB,0.1,Bid,5,Red); 
         }
        }

     }   

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

на обратных условиях покупки? я уже весь мозг сломал

 
funnyrain8:
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//---- 
if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     
        
    }
    
//-----     
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//-----ззакртыие ордеров
for (int i=1; i<=OrdersTotal(); i++)       
     {                                        
      if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
        {                                     
         if(r < 50 && p < m)
         {
             OrderClose(ticketB,0.1,Bid,5,Red); 
         }
        }

     }   

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

на обратных условиях покупки? я уже весь мозг сломал


 if(OrdersTotal()>=OrderCount)  //Обрати внимание на эту конструкцию
     {                            //
      return;
     }
//---- 
   if(r>50 && p>m) //условия открытия ордера на покупку
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
               OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
      ticketB=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     

     }

//-----     
   if(r<50 && p<m) //условия открытия ордера на продажу
     {
     for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
               OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
      ticketS=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue);
     }

Как то так
 
funnyrain8:
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//---- 
if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     
        
    }
    
//-----     
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//-----ззакртыие ордеров
for (int i=1; i<=OrdersTotal(); i++)       
     {                                        
      if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
        {                                     
         if(r < 50 && p < m)
         {
             OrderClose(ticketB,0.1,Bid,5,Red); 
         }
        }

     }   

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

на обратных условиях покупки? я уже весь мозг сломал


Если ордер выбирается по тикету перебор в цикле не нужен. выложите полный код советника, по куску не понятно где вы допускаете ошибку. Да и код выкладывайте правильно, есть кнопочка SRC для вставки кода в сообщение.
 
#property copyright "Copyright 2017, 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                                             |
//+------------------------------------------------------------------+
int ticketB,ticketS;
void OnTick()
//------------------------------------------------------------------------------------------------
{
double p = iClose("EURUSD",PERIOD_M15,0);                                    //показание текущей цены 
double r = iRSI  ("EURUSD",PERIOD_M15,21,PRICE_CLOSE,0);                     //значение индюка RSI
double m = iMA   ("EURUSD",PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,0);          //значение индюка МА
int    OrderCount  = 1;

//---------------ПОДСЧЕТ ОРДЕРОВ------------------------------------------------------------------
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//-------------ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ--------------------------------------------------------------------
/*if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green);         
    }
//------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------
if(r<50 && p<m)                                                           
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
                  ticketB = OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
     }*/
//------------------ОТКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//---------------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r>50 && p>m) 
     {
   for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketS,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
                  ticketS = OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
     }
}
//+------------------------------------------------------------------+
спасибо за SRC), вот так выглядит все что смог написать, тс выглядит так продажа должна происходит когда свеча закрылась ниже машки и rsi ниже 50, и закрытие ордера на противоположных условиях, и одновременно после закрытия должна происходит покупка и после закрытие, то одному ордеру и не больше и так  далее циклично...но сейчас у меня открывается один ордер и все, и стопы не работают...
 
funnyrain8:
спасибо за SRC), вот так выглядит все что смог написать, тс выглядит так продажа должна происходит когда свеча закрылась ниже машки и rsi ниже 50, и закрытие ордера на противоположных условиях, и одновременно после закрытия должна происходит покупка и после закрытие, то одному ордеру и не больше и так  далее циклично...но сейчас у меня открывается один ордер и все, и стопы не работают...


переписал в своем стиле, надеюсь разберешься, если чего не понятно будет спрашивай

//+------------------------------------------------------------------+
//|                                                   funnyrain8.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict

input int             MagicNumber  = 20110315;       // Номер копии
input string          CommentOrder = "Origenal";     // Комментарий к ордеру
input int             Slippage=100;             // Проскальзование (Пипс)
input double          Lot=0.01;           // Объем лота 
input int             SignalBar=0; // Сигнальный бар 

sinput string            s1=NULL; // Setting indicator slow МА
input int                ma_period=89;    // Period
input ENUM_MA_METHOD     ma_method=MODE_EMA;//Method calculation
input ENUM_APPLIED_PRICE ma_price=PRICE_CLOSE;//Price calculation

sinput string            s2=NULL; // Setting indicator RSI
input int                rsi_period=21; // Period
input ENUM_APPLIED_PRICE rsi_price=PRICE_CLOSE;//Price calculation
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(TotalOrder()==0)OrderOpen(GetSignal());
   else OrderClose(GetSignal());
  }
//+------------------------------------------------------------------+
int GetSignal()
  {
   double rsi = iRSI(_Symbol,PERIOD_CURRENT,rsi_period,rsi_price,SignalBar);                     //значение индюка RSI
   double ma = iMA   (_Symbol,PERIOD_CURRENT,ma_period,0,ma_method,ma_price,SignalBar);          //значение индюка МА

   if(Close[SignalBar]>ma && rsi>50.0)return(OP_BUY);
   if(Close[SignalBar]<ma && rsi<50.0)return(OP_SELL);
   return(WRONG_VALUE);
  }
//+------------------------------------------------------------------+
int TotalOrder()
  {
   int value=0;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderType()>1)continue;
      value++;
     }
   return(value);
  }
//+------------------------------------------------------------------+
void OrderOpen(int type)
  {
   if(type==WRONG_VALUE)return;
   double price_open=(type==OP_BUY)?NormalizeDouble(Ask,_Digits):NormalizeDouble(Bid,_Digits);
   int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
   if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
  }
//+------------------------------------------------------------------+
void OrderClose(int type)
  {
   if(type==WRONG_VALUE)return;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderType()!=type)continue;
      double price_close=(type==OP_BUY)?NormalizeDouble(Bid,_Digits):NormalizeDouble(Ask,_Digits);
      bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
      if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
     }
  }
//+------------------------------------------------------------------+

...

 
Sergey Gritsay:


переписал в своем стиле, надеюсь разберешься, если чего не понятно будет спрашивай

...


оу, я думал я практически все написал кроме закрытия а мне еще учиться и учиться...спасибо большое теперь хоть на пример от чего идти дальше можно будет...жесть, еще раз спасибо)
 
Здравствуйте. Я скачала программу Метатрейдер 5. Я подписалась на 2 сигнала. Баланс на счете у меня положительный 20$. Пробую установить виртуальный хостинг у меня ничего не получается. Нажимаю навигатор- подключиться к торговому счету ,у меня даже в таблице нет такой вкладки виртуальный хостинг. Высылаю скриншоты. Как мне подключиться к виртуальному хостингу?
Файлы:
3p46y0.jpg  273 kb
g4ppe22.jpg  264 kb
 
Жанна Платонова:
Здравствуйте. Я скачала программу Метатрейдер 5. Я подписалась на 2 сигнала. Баланс на счете у меня положительный 20$. Пробую установить виртуальный хостинг у меня ничего не получается. Нажимаю навигатор- подключиться к торговому счету ,у меня даже в таблице нет такой вкладки виртуальный хостинг. Высылаю скриншоты. Как мне подключиться к виртуальному хостингу?

Щёлкните справку в главном меню.
 
Здравствуйте. У меня такой вопрос - на маке (sierra) во всех поставленных (через вино) от разных компаний платформах мт4 один и тот же глюк - терминал если его освобождаешь со штатного места внизу чтобы он передвигался как свободное окно - он съёживается и работать через его совершенно невозможно. Отключение функции автоарранжир никаких результатов не даёт . Вернуть терминал на прежнее место совершенно невозможно - т.е. он просто не прикрепляется и больше не раскрывается.  У меня вопрос - может кто знает сочетание клавиш или кнопку для возврата всего интерфейса на свои штатные места. С ув.