Ваши вопросы по языку MQL4

gince

Местный знаток
Остался один вопрос, почему нет текста ?
GetWindowTextLengthW(hWnd_W_edit); определяет длину строки, то значит hWnd_W_edit правильный.

Код:
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#import "user32.dll"
int FindWindowW(int    hWnd,string lpString);
int FindWindowExW(int hWndParent,int hWndChildAfter,string lpszClass,string lpszWindow);
int GetWindowTextLengthW(int hWnd);
int GetWindowTextW(int   hWnd,string lpString,int    nMaxCount);
#import

void deinit(){}

void start()
  {
   int i=0;
   int handle=FindWindowW(NULL,"Alert");
   int hWnd_W_edit=FindWindowExW(handle,NULL,"Edit",NULL);           Print("hWnd_W_edit   ",hWnd_W_edit);
 
   string s="";
   int nMaxCount=(int)GetWindowTextLengthW(hWnd_W_edit);
   for(i=0; i<nMaxCount; i++) s+=" ";
   GetWindowTextW(hWnd_W_edit,s,nMaxCount+1);
   Print("Return Text : ",s);
  }
 

оn220

Интересующийся
Добрый!
подскажите что значит эти строки,чему равна цена в итоге.
int Period=10;
double Price=2.0/(1+Period1);
спасибо большое за подсказку если что.
 

sss_ddd

Новичок форума
Подскажите пожалуйста,как в советник прописать перевод в БУ
 

Ugar

Гуру форума
Добрый!
подскажите что значит эти строки,чему равна цена в итоге.
int Period=10;
double Price=2.0/(1+Period1);
спасибо большое за подсказку если что.
Что бы посчитать надо знать значение переменной Period1, а тут задано только значение Period. Это разные переменные.
 

Ugar

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

sss_ddd

Новичок форума
Проще всего взять готовую функцию, того что надо и вызвать в нужном месте. Безубытков бывает много разных, нужно найти именно такую функцию, которая будет делать именно то что нужно.
нужно чтобы после того,как цена прошла n-пунктов в нужном направлении стоп лосс переносился на уровень открытия сделки
 

Ugar

Гуру форума
нужно чтобы после того,как цена прошла n-пунктов в нужном направлении стоп лосс переносился на уровень открытия сделки
Набросал бесплатный вариант функции. Не проверял, но должен работать. Остаётся разместить функцию куда положено и вызвать её где надо. Ну и конечно проверить.
Код:
//+------------------------------------------------------------------+
//|Функция от Ugar eMail:[email protected]                                |
/*+------------------------------------------------------------------+
Бесплатная Фунция переноса стопа в безубыток.
noloss - Прибыль в пунктах, при достижении которой, стоп переносится в безубыток
mag - Маджик номер ордеров по которым будет работать функция.*/
void NoLoss_Free(uint noloss,int mag)
   {
   if(noloss==0)return;
   int i, total, OrdMagic, ordtype, oticket, noloss_profit=0;
   double oop, osl, ocp;
   string OrdSymb;
   total=OrdersTotal();
   for(i=total-1; i>=0; i--)
      {
      bool Select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      OrdSymb=OrderSymbol();
      OrdMagic=OrderMagicNumber();
      if(OrdSymb!=_Symbol)continue;
      if(OrdMagic!=mag)continue;
      ordtype=OrderType();
      oticket=OrderTicket();
      osl=OrderStopLoss();
      oop=OrderOpenPrice();
      if(ordtype==OP_BUY)
         {
         ocp=Bid;
         if(oop-osl>0.5*_Point && (ocp-oop)/_Point>=noloss)
            {
            osl=oop+noloss_profit*_Point;
            if(!OrderModify(oticket,OrderOpenPrice(),NormalizeDouble(osl,_Digits),
            OrderTakeProfit(),0,clrBlue))Print(__FUNCTION__," Error=",_LastError);
            }
         }
      if(ordtype==OP_SELL)
         {
         ocp=Ask;
         if(osl-oop>0.5*_Point && (oop-ocp)/_Point>=noloss)
            {
            osl=oop-noloss_profit*_Point;
            if(!OrderModify(oticket,OrderOpenPrice(),NormalizeDouble(osl,_Digits),
            OrderTakeProfit(),0,clrRed))Print(__FUNCTION__," Error=",_LastError);
            }
         }
      }
   }
 

оn220

Интересующийся
Квадратные скобки почему то если целиком кидаешь не везде выдает.
High
 

Ugar

Гуру форума
Спасибо.Ну расчет машки,вроди,с виду на графике.
int Period=10;
double Price=2.0/(1+Period);
MA=Price*High+(1-Price)*MA[i+1];
Скорее всего, машка уже посчитана и её значение берётся из ячейки массива MA[i+1]. А переменная МА не знаю что означает. Возможно программист, писавший этот код, был пьян или специально применил такие переменные, что бы запутывать ламеров, которые будут ковырять код.
Я когда то, то же запутывал ламеров, но мне мой тёска подсказал способ интересней, мой код выглядел примерно так

318605508214748360116521 [ 932068147214748360043731 ]= 318605508214748360116521 [ 932068147214748360043731 ]+1;
 

Bullra

Новичок
Не могу понять как реализовать свойство background в коде. Нужно, чтобы график был поверх определенных графических объектов, а для этого надо как-то эти самые объекты сделать фоновыми.
 
Последнее редактирование:

vladradon

Программист
Не могу понять как реализовать свойство background в коде. Нужно, чтобы график был поверх определенных графических объектов, а для этого надо как-то эти самые объекты сделать фоновыми.
Это есть в справочнике:
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true);
Последний параметр либо убирает на задний план (true), либо выводит поверх (false).
 
Последнее редактирование:

sss_ddd

Новичок форума
Набросал бесплатный вариант функции. Не проверял, но должен работать. Остаётся разместить функцию куда положено и вызвать её где надо. Ну и конечно проверить.
Код:
//+------------------------------------------------------------------+
//|Функция от Ugar eMail:[email protected]                                |
/*+------------------------------------------------------------------+
Бесплатная Фунция переноса стопа в безубыток.
noloss - Прибыль в пунктах, при достижении которой, стоп переносится в безубыток
mag - Маджик номер ордеров по которым будет работать функция.*/
void NoLoss_Free(uint noloss,int mag)
   {
   if(noloss==0)return;
   int i, total, OrdMagic, ordtype, oticket, noloss_profit=0;
   double oop, osl, ocp;
   string OrdSymb;
   total=OrdersTotal();
   for(i=total-1; i>=0; i--)
      {
      bool Select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      OrdSymb=OrderSymbol();
      OrdMagic=OrderMagicNumber();
      if(OrdSymb!=_Symbol)continue;
      if(OrdMagic!=mag)continue;
      ordtype=OrderType();
      oticket=OrderTicket();
      osl=OrderStopLoss();
      oop=OrderOpenPrice();
      if(ordtype==OP_BUY)
         {
         ocp=Bid;
         if(oop-osl>0.5*_Point && (ocp-oop)/_Point>=noloss)
            {
            osl=oop+noloss_profit*_Point;
            if(!OrderModify(oticket,OrderOpenPrice(),NormalizeDouble(osl,_Digits),
            OrderTakeProfit(),0,clrBlue))Print(__FUNCTION__," Error=",_LastError);
            }
         }
      if(ordtype==OP_SELL)
         {
         ocp=Ask;
         if(osl-oop>0.5*_Point && (oop-ocp)/_Point>=noloss)
            {
            osl=oop-noloss_profit*_Point;
            if(!OrderModify(oticket,OrderOpenPrice(),NormalizeDouble(osl,_Digits),
            OrderTakeProfit(),0,clrRed))Print(__FUNCTION__," Error=",_LastError);
            }
         }
      }
   }

спасибо**
 

SvNick

Прохожий
Подскажите пожалуйста, как сделать, чтоб например цена пересекла МА вверх и после этого Macd открывал ордера при пересечении 0 пока цена находится выше МА?
 
Верх