Помощь в кодировании - страница 188

 

привет младен или кто угодно,

Я заметил, что платформа mt4 имеет некоторые индикаторы по умолчанию (хотя некоторые повторяются в части пользовательских индикаторов,), но код, я думаю, не совсем тот же самый, как получить или увидеть код этих индикаторов по умолчанию, спасибо большое за информацию.

 
kenwa:
привет mladen или кто-либо другой, я заметил, что платформа mt4 имеет некоторые индикаторы по умолчанию (хотя некоторые повторяются в части пользовательских индикаторов,), но код, я думаю, не совсем тот же самый, как получить или увидеть код этих индикаторов по умолчанию, спасибо большое за информацию.

Вы не можете

Это встроенные индикаторы (выполняются непосредственно в терминале).

 

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

 

Кто-то спросил меня, как я использую мультитаймфрейминг из одного файла (когда нет возможности вызвать встроенные функции).

Вот один простой пример и некоторые пояснения к нему

_____________________________

Прилагаемый индикатор ведет себя как 3 индикатора в одном, и в коде вы найдете комментарии, что и когда делается. Надеюсь, это поможет некоторым людям понять, как можно сделать однофайловый корректный мультитаймфреймовый индикатор (который, помимо всего прочего, всегда будет рассчитывать правильное количество баров, не предполагая, сколько баров в целевом таймфрейме было изменено).

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

Файлы:
 

привет младен,

знаете ли вы, возможно ли и как сделать iStochasticOnArray? есть ли шаблон или формула для этого? спасибо за информацию.

 
kenwa:
Привет, Младен, не знаете ли вы, возможно ли и как сделать iStochasticOnArray? Есть ли шаблон или формула для этого? Спасибо за информацию.

kenwa

Не существует такой вещи, как встроенная функция. В этих постах вы можете увидеть, как может быть написана функция для этого и как ее можно использовать: https: //www.mql5.com/en/forum/177239/page34

 

Привет, Младен:

немного глубоко для меня

Например, double iStoch(double priceR, double priceH, double priceL, int period, int slowing, int i, int instanceNo=0) - это удвоение внутри double? Этот метод может уменьшить занимаемый indexbuffer в mq4?

Эта функция кажется мне немного странной :

stoch = iStoch(rsi,rsi,rsi,StoPeriod,StoSlowing,i);

Спасибо за разъяснения.

 
mladen:
Я не знаю, почему он не принимает другой wav-файл.

Если вы изменили его в коде, он должен принять его.

Чтобы повторить его 5 раз, вы должны поместить его в цикл, но это может вызвать некоторые проблемы (если звуковой файл слишком длинный).

Вот код, который я использовал (я знаю очень мало о кодировании, чтобы знать, как делать циклы):

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

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#property indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

extern bool alertsOn = true;

extern bool alertsSound = true;

extern bool alertsMessage = true;

extern bool alertsNotification = false;

extern bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[];

bool alerted[];

string symbols[];

int types[];

int times[];

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// собираем данные для заказов

//

//

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

{

if (!OrderSelect(i,SELECT_BY_POS)) continue;

if (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue;

if (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime()) continue;

//

//

//

//

//

for (int k=ArraySize(tickets); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

if (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(types ,size); types = OrderType();

ArrayResize(times ,size); times = OrderOpenTime();

}

}

//

//

// проверяем, нужно ли оповещать о каком-то заказе.

//

//

for (i=ArraySize(tickets)-1; i>=0; i--)

{

string type = "";

if (!alerted)

{

alerted = true;

switch (types)

{

case OP_BUY : type = "buy"; break;

case OP_SELL : type = "sell"; break;

case OP_BUYSTOP : type = "buy stop"; break;

case OP_BUYLIMIT : type = "лимит покупки"; break;

case OP_SELLSTOP : type = "sell stop"; break;

case OP_SELLLIMIT : type = "sell limit"; break;

}

doAlert(type+" открыта при : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" для "+symbols);

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

строковое сообщение;

message = doWhat;

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertsNotification) SendNotification("order alerts "+message);

if (alertsSound) PlaySound("hallelujah.wav");

}

но при срабатывании просто звонит обычное оповещение.

Мысль: если я не могу заставить PlaySound меняться, может быть, вы могли бы закодировать цикл, который бы воспроизводил короткое обычное оповещение каждые 1 секунду в течение 10 раз? - По крайней мере, это сделало бы гораздо больше, чтобы разбудить меня, чем просто один обычный звук оповещения....

Спасибо

 
person77:
Вот код, который я использовал (я знаю очень мало о кодировании, чтобы знать, как делать циклы):

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

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#property indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

extern bool alertsOn = true;

extern bool alertsSound = true;

extern bool alertsMessage = true;

extern bool alertsNotification = false;

extern bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[];

bool alerted[];

string symbols[];

int types[];

int times[];

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// собираем данные для заказов

//

//

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

{

if (!OrderSelect(i,SELECT_BY_POS)) continue;

if (alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) continue;

if (alertsForMagicNumber != 0 && alertsForMagicNumber!=OrderMagicNumber()) continue;

if (alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime()) continue;

//

//

//

//

//

for (int k=ArraySize(tickets); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

if (k==0)

{

int size = ArraySize(tickets)+1;

ArrayResize(tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(types ,size); types = OrderType();

ArrayResize(times ,size); times = OrderOpenTime();

}

}

//

//

// проверяем, нужно ли оповещать о каком-то заказе.

//

//

for (i=ArraySize(tickets)-1; i>=0; i--)

{

string type = "";

if (!alerted)

{

alerted = true;

switch (types)

{

case OP_BUY : type = "buy"; break;

case OP_SELL : type = "sell"; break;

case OP_BUYSTOP : type = "buy stop"; break;

case OP_BUYLIMIT : type = "лимит покупки"; break;

case OP_SELLSTOP : type = "sell stop"; break;

case OP_SELLLIMIT : type = "sell limit"; break;

}

doAlert(type+"" открыта при : "+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" для "+symbols);

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

void doAlert(string doWhat)

{

строковое сообщение;

message = doWhat;

if (alertsMessage) Alert(message);

if (alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

if (alertsNotification) SendNotification("order alerts "+message);

if (alertsSound) PlaySound("hallelujah.wav");

}

но при срабатывании просто звонит обычное оповещение.

Мысль: если я не могу заставить PlaySound меняться, может быть, вы могли бы закодировать цикл, который бы воспроизводил короткое обычное оповещение каждые 1 секунду в течение 10 раз? - По крайней мере, это сделает гораздо больше, чтобы разбудить меня, чем один обычный звук оповещения ... ... .

Спасибо

Person77,

Раньше это работало так: перейдите на открытый график, затем перейдите в tools/options/events, затем в alert просто измените wav. на тот, который вы хотите, но я не делал этого некоторое время, поэтому не уверен, что это все еще работает, и убедитесь, что wav файл, который вы используете, находится в папке sounds.

Файлы:
alert.png  99 kb
 

mrtools - спасибо: это сработало отлично!

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