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

Рыболов

Новичок форума
Привет,

на примере вполне известного индикатора:
double ExampleCustom=iCustom(Symbol(),0,"Moving Averages",20,0,MODE_SMA,shift); // Пример вызова пользовательского индикатора

обращение примерно так и думал, функцию iCustom() только не нашел
 
Последнее редактирование:

Milord

Местный знаток
Вопрос профи программерам???

подскажите плиз,как открыть ордер на Open[0] или на Close[0], можно два варианта если знаете, желательно чтобы поменьше кода было...заранее СПАСИБО!
 

Ugar

Гуру форума
подскажите плиз,как открыть ордер на Open[0] или на Close[0], можно два варианта если знаете, желательно чтобы поменьше кода было...заранее СПАСИБО!
Close[0]=Bid это текущая цена. По ней и открывается Sell, Buy открывается по Ask=Close[0]+спред.

Проще всего по Open[0] открывать Sell в момент открытия нового бара. Открытие Buy в этот момент будет по Ask=Open[0]+спред.

Момент открытия бара, по простому
static datetime LastTime;
if(LastTime==0)LastTime=Time[0];
if(LastTime==Time[0])return(0);
LastTime=Time[0];

дальше код будет выполняться только при открытии нового бара.
 

eevviill

Заблокирован
Close[0]=Bid это текущая цена. По ней и открывается Sell, Buy открывается по Ask=Close[0]+спред.

Проще всего по Open[0] открывать Sell в момент открытия нового бара. Открытие Buy в этот момент будет по Ask=Open[0]+спред.

Момент открытия бара, по простому
static datetime LastTime;
if(LastTime==0)LastTime=Time[0];
if(LastTime==Time[0])return(0);
LastTime=Time[0];

дальше код будет выполняться только при открытии нового бара.
У меня так. Но суть одинакова.
PHP:
Expand Collapse Copy
static int prevtime;
...
if (Time[0] == prevtime) {Sleep(50);return(0);}
   prevtime = Time[0];


У меня вопрос. Зачем статик в этом случае?
 

qqmber

Почетный гражданин
У меня так. Но суть одинакова.
PHP:
Expand Collapse Copy
static int prevtime;
...
if (Time[0] == prevtime) {Sleep(50);return(0);}
   prevtime = Time[0];


У меня вопрос. Зачем статик в этом случае?

Рудимент от языка С остался. В MQL static практически то же самое, что и глобальная переменная, но видно его только внутри функции, в которой он объявлен. Основное свойство - сохраняет значение при выходе и повторном входе в функцию. Здесь нужен чтобы помнить Time[0] предыдущего тика.
 

eevviill

Заблокирован
Рудимент от языка С остался. В MQL static практически то же самое, что и глобальная переменная, но видно его только внутри функции, в которой он объявлен. Основное свойство - сохраняет значение при выходе и повторном входе в функцию. Здесь нужен чтобы помнить Time[0] предыдущего тика.
Тоесть если переменная в глобальных то статик не нужен. Правильно?
 

AlexeyVik

Программист mql4 mql5
У меня так. Но суть одинакова.
PHP:
Expand Collapse Copy
static int prevtime;
...
if (Time[0] == prevtime) {Sleep(50);return(0);}
   prevtime = Time[0];
У меня вопрос. Зачем статик в этом случае?
Суть то одинакова, но у Андрея правильней.
Переменная принимающая значение времени должна быть datetime не смотря на то, что имеет целочисленное значение и работает без проблем.
 

Milord

Местный знаток
Close[0]=Bid это текущая цена. По ней и открывается Sell, Buy открывается по Ask=Close[0]+спред.

Проще всего по Open[0] открывать Sell в момент открытия нового бара. Открытие Buy в этот момент будет по Ask=Open[0]+спред.

Момент открытия бара, по простому
static datetime LastTime;
if(LastTime==0)LastTime=Time[0];
if(LastTime==Time[0])return(0);
LastTime=Time[0];

дальше код будет выполняться только при открытии нового бара.
спасибо за ответ, но что то не понял куда прицепить это:
{
OrderSend(.....);
}
 

_SERG_

Активный участник
Есть ли способ выводить текстовую или графическую инфу в окно, отличное, от того, в котором работает советник?
Типа, мультивалютник выводит инфу по сделке в окно пары, по которой сделка произошла?

В книге Сергея Ковалева в разделе создание обычной программы, есть пример вывода данных в другое окно.
функция Inform.mqh. Там с исходником и пояснениями. Сам пользую чтобы не заморачиваться.
 

Ugar

Гуру форума
спасибо за ответ, но что то не понял куда прицепить это:
{
OrderSend(.....);
}
Я же написал что дальше код будет выполняться при открытии нового бара.
Если сразу поле моего кода разместить OrderSend() то будет отправляться приказ при открытии нового бара.
 

kamilkz

Почетный гражданин
Уважаемые программисты!
Объединил два советника (OM_2WAY_v3.6_INFO и MO 27,04,13_edu) в один (OM_2WAY_v3.6+Razrulivatel), скомпелировал, вроде все нормально без ошибок, но вот беда – полученный новый советник (OM_2WAY_v3.6+Razrulivatel) всегда открывает первый ордер размером 1 лот, независимо от того какое значение имеет StartLot или UseAutoLot (false или true), хотя (OM_2WAY_v3.6_INFO), без изменений работает нормально и ставит ордера в зависимости от переменных StartLot или UseAutoLot. Подскажите, в чем проблема?
 

Вложения

qqmber

Почетный гражданин
Уважаемые программисты!
Объединил два советника (OM_2WAY_v3.6_INFO и MO 27,04,13_edu) в один (OM_2WAY_v3.6+Razrulivatel), скомпелировал, вроде все нормально без ошибок, но вот беда – полученный новый советник (OM_2WAY_v3.6+Razrulivatel) всегда открывает первый ордер размером 1 лот, независимо от того какое значение имеет StartLot или UseAutoLot (false или true), хотя (OM_2WAY_v3.6_INFO), без изменений работает нормально и ставит ордера в зависимости от переменных StartLot или UseAutoLot. Подскажите, в чем проблема?
А ты у автора МО спроси, у cmillion-a. Он тут на сайте тусуется. Заодно узнаешь про себя много нового.
 

evgen_82

Активный участник
Уважаемые профи помогите реализовать идею. Хочу поймать сигнал от стоха при выходе из границ перекупленности (перепроданности) при условии пересечения его линий в этих зонах. Еще ввел условие - чтобы это пересечение было не дальше параметра определенного количества баров - параметр Finder. Но реализовать никак не могу. Гляньте кто-нить свежим взором где тут ошибки. Хотелось бы еще как-нибудь упростить эту функцию.

зы: Параметры:
Li_28 = TRUE; и Li_24 = TRUE;
сова считывает как добро на открытие ордеров
PHP:
Expand Collapse Copy
bool Stochastic () {
double Sig_Buy = zoneBUY; 
double Sig_Sell = zoneSELL;
bool Exit_UrBuy = TRUE;
bool Exit_UrSell = TRUE;
double sM0,sM1,sS0, sS1;
bool Bar_BuyCross = FALSE;
bool Bar_SellCross = FALSE;
int bar_b, bar_s;


   sM0  = iStochastic(NULL,timeframe,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,1);
   sM1  = iStochastic(NULL,timeframe,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,2);
   sS0 = iStochastic(NULL,timeframe,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_SIGNAL,1);
   sS0 = iStochastic(NULL,timeframe,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_SIGNAL,2);


bool CrossBuy = (sS0<Sig_Buy && sM0<Sig_Buy && sM1<sS1 && sM0>=sS0);
bool CrossSell = (sS0>Sig_Sell && sM0>Sig_Sell && sM1>sS1 && sM0<=sS0);

if (UseExitUr) {
if (sM0 >Sig_Buy && sM1 <= Sig_Buy) Exit_UrBuy = TRUE;
else Exit_UrBuy = FALSE;
if (sM0 <Sig_Sell && sM1 >= Sig_Sell) Exit_UrSell = TRUE;
else Exit_UrSell = FALSE;
}

if (CrossBuy) { TimeCrossB =  iOpen( NULL, 0, 1); }

  for (int cnt = 1 ; cnt < Finder ; cnt++) {
bar_b = iBarShift(NULL, 0, TimeCrossB, cnt); 
if (bar_b > 0) Bar_BuyCross = TRUE; 
}

if (Bar_BuyCross && Exit_UrBuy) {
     Li_24 = TRUE;
     TimeCrossB = -1;
 }

if (CrossSell) {TimeCrossS = iOpen( NULL, 0, 1);}

for (int cnm = 1 ; cnm < Finder ; cnm++) {
bar_s = iBarShift(NULL, 0, TimeCrossS, cnm); 
if (bar_s > 0) Bar_SellCross = TRUE; 
}


if (Bar_SellCross && Exit_UrSell) {
    TimeCrossS = -1;
    Li_28 = TRUE;
   }

   return(false);
}
 

Milord

Местный знаток
Автомат на 4 и 5 знаков???

int K;

//+--Блок иницилиазации советника------------------------------------+
int init()
{
K=1;
if ((Digits==3) || (Digits==5)) {K=10;}
TrailingStop=TrailingStop*K;
SL=SL*K;
prevtime = Time[0];
return(0);
}
//+--Конец Блока иницилиазации советника-----------------------------+
вот нашел кусок кода на автомат 4 или 5 знаков котир,все вроде бы ясно и понятно, кроме строки prevtime = Time[0];
неясно что она делает, и надо ли переменную prevtime объявлять в начале кода?
дайте свои коменты и советы плиз, кто имеет опыт в коде MQL4, заранее СПАСИБО!
 

Who has viewed this thread (Total: 4) Посмотреть

Верх