Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1091

 

Приветствую. MQL4. Хочу игру "змейка" в торговый советник прописать.

Подскажите, пожалста, можно ли в советнике задать количество секунд, определяющее периодичность возникновения событий OnTimer() меньше 1, к примеру 0.7 ?

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

 
Andrey Sokolov:

Приветствую. MQL4. Хочу игру "змейка" в торговый советник прописать.

Подскажите, пожалста, можно ли в советнике задать количество секунд, определяющее периодичность возникновения событий OnTimer() меньше 1, к примеру 0.7 ?

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

https://docs.mql4.com/ru/eventfunctions/eventsetmillisecondtimer
EventSetMillisecondTimer - Работа с событиями - Справочник MQL4
EventSetMillisecondTimer - Работа с событиями - Справочник MQL4
  • docs.mql4.com
Указывает клиентскому терминалу, что для данного эксперта или индикатора необходимо генерировать события таймера с периодичностью менее одной секунды. нужно получать события таймера чаще, чем один раз в секунду. Если вам достаточно обычного таймера с периодом в несколько секунд, то используйте EventSetTimer(). Обычно эта функция должна...
 
Alexey Viktorov спасиб
 

Код ниже выводит 牖漠摲牥⁳湩潦〉〮र〲थ⸰〰㠉┰〉〮र

А должен вывести текст test

Файлы лежат в папке Files\\Test\\

Функция пишет что хендл верен он равен 1 и сразу GetLastError пишет ошибку 5008 Не верный хендл ....

Куда копать ?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   core();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
void core()
  {
   string value = "", name = "";

   name =  "Test" + "\\test.csv";
   Print(FileIsExist(name));

   ResetLastError();

   int m_hendle = -1;
   m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV);
   if(m_hendle != INVALID_HANDLE)
     {
      Print((string)m_hendle + "    " + name + " [" + (string)FileSize(m_hendle) + "]"+ (string)GetLastError());
       while(!FileIsEnding(m_hendle))
        {
         string sCurrent = FileReadString(m_hendle);
         Print("sCurrent = ", sCurrent);
        }
      FileClose(m_hendle);
     }
  }
//+------------------------------------------------------------------+
 
Vladimir Pastushak:

Код ниже выводит 牖漠摲牥⁳湩潦〉〮र〲थ⸰〰㠉┰〉〮र

Похоже на "коронавирус"

 

Здравствуйте...помогите конвертировать единоразово советник мт5 в 4 пожалуйста. Учится самому нет ни желания ни нужды, если сложно я пойму и забью, не велика нужда...

Уже просил, а в ответ отсылки на какие то темы, как научится или кому то настройки подавай, "эксперта Грааля". Пока читал форумы, показалось что люди помогут...что интересно, если люди просят сделать что либо не дорого, за деньги...помогают бесплатно, а когда прошу просто без денег, то видимо считают за того кто хочет чужими руками и нашару...были бы деньги здесь и сейчас, заплатил бы сразу и не морочился, но их нет, а когда появятся будет уже не нужно...проще забить, но все же...надежда умирает последней.


Заплатить могу позже, когда появятся...

Файлы:
Lift.mq5  9 kb
 
eKpuBu4:

Здравствуйте...помогите конвертировать единоразово советник мт5 в 4 пожалуйста. Учится самому нет ни желания ни нужды, если сложно я пойму и забью, не велика нужда...

А где остальное?

Expert.mqh>

SignalTRIX.mqh>


SignalStoch.mqh>

TrailingFixedPips.mqh>

MoneyFixedRisk.mqh>

 
Здравствуйте. Не блещу знаниями в программировании mql4
input double   Lots=0.01;     //Lots size
input int      Tprof=1000;     //TakeProfit
input int      TreilSt=100;    //Trailing Stop
input int      TrStKor=10;     //The size of the correction Trailing Stop
input int      Magik=1001012;  //Magic Number
extern int Bars_left = 5;
extern int Bars_right = 5;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static double Upf,Lowf;
   double Tupf=0,Tlowf=0;
   int i,k;
   for(i=2; i<100; i++)
     {
      Tupf=iCustom(Symbol(),0,"takbir",Bars_left,Bars_right,0,i);
      if(Tupf>0)
         break;
     }
   for(k=2; k<100; k++)
     {
      Tlowf=iCustom(Symbol(),0,"takbir",Bars_left,Bars_right,1,k);
      if(Tlowf>0)
         break;
     }
//----Open position
//if(i>0) Print("i = ", i, " k = ",k);
   int total=OrdersTotal();
/*if(total<1)
      {*/
    
   if(Ask>Tupf+15*_Point && Tupf!=Upf)
     {
      double StL=NormalizeDouble(Tlowf,_Digits);
      int ticket=OrderSend(NULL,OP_BUY,Lots,Ask,30,StL,Bid+Tprof*_Point,NULL,Magik,0,clrBlue);
      if(ticket<0)
        {
         Print("OrderSend error #",GetLastError());
        }
      else {Print("Ask=",Ask,"Upf=",Upf," StL=",StL); Upf=Tupf;}
     }
   if(Bid<Tlowf-15*_Point && Tlowf!=Lowf)
     {
      double StL=NormalizeDouble(Tupf,_Digits);
      int ticket=OrderSend(NULL,OP_SELL,Lots,Bid,30,StL,Ask-Tprof*_Point,NULL,Magik,0,clrRed);
      if(ticket<0)
        {
         Print("OrderSend error #",GetLastError());
        }
      else {Print("Bid=",Bid,"Lowf=",Lowf," StL=",StL);   Lowf=Tlowf;}
     }
// }
//----Trailing Stop operation
   for(int cni=0;cni<total;cni++)
     {
      if(!OrderSelect(cni,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderMagicNumber()==Magik && TreilSt>0)
        {
         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>_Point*TreilSt)
              {
               if(OrderStopLoss()<Bid-_Point*TreilSt-TrStKor*_Point)
                 {
                  //--- modify order and exit
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-_Point*TreilSt,OrderTakeProfit(),0,clrBlue))
                     Print("OrderModify error ",GetLastError());
                  return;
                 }
              }
           }
         if(OrderType()==OP_SELL)
           {
            if((OrderOpenPrice()-Ask)>_Point*TreilSt)
              {
               if(OrderStopLoss()>Ask+_Point*TreilSt+_Point*TrStKor)
                 {
                  //--- modify order and exit
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TreilSt,OrderTakeProfit(),0,clrRed))
                     Print("OrderModify error ",GetLastError());
                  return;
                 }
              }
           }
        }
     }
  }

Но никак не могу понять, как мне исправить следующее:

double StL=NormalizeDouble(Tupf,_Digits);

Стоп лосс выставляется по предыдущему "верхнему фракталу"

А нужно:

Если пробит последний нижний фрактал - стоп лосс ставится на максимальной цене между нижним фракталом и пробитием

Если Пробит последний верхний фрактал - стоп лосс ставится на минимальной цене между верхним фракталом и пробитием

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

Может быть во время открытия ордера как то искать? И через модификацию ордера менять стоп и тп, но как, не могу понять.

Прошу помощи. Уважаемые профи, уделите 5 минут вашего времени.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
v0van1990:
Прошу помощи. Уважаемые профи, уделите 5 минут вашего времени.

Вам надо здесь исправлять

     {
      Tupf=iCustom(Symbol(),0,"takbir",Bars_left,Bars_right,0,i);
      if(Tupf>0)
         break;
     }
 
MakarFX:

Вам надо здесь исправлять

Эта функция дает мне информацию о нестандартных  последних образованных фракталах,  и вначале советника я меняю эти нестандартные фракталы.

Или в индюке дописывать функцию - информацию о high или low до пробития последнего фрактала? или при образовании нового фрактала?

Я верно понимаю?

Причина обращения: