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

ansol

Местный знаток
Может через то что разными версиями(билдами) копилятора скопилировано?

Да не! Везде 509 билд у меня. Оказывется, все еще интереснее: сидишь так, жмешь "Компилировать" длина ех4 меняется :not-bad:
Можно в тотал командере смотреть, можно в проводнике.
Просто одной кнопочкой так "щелк" - посмотрел, другое значение! От 19200 до 20800 меняется. Гы!
 

eevviill

Заблокирован
Кто знает куда официально писать(желательно на форуме) метаквотам предложения по модернизации mql4?

Я вот что предлагаю.
PHP:
OrdersTotal(int magic=все,string symbol=любой,int type=любой)
 
Последнее редактирование:

ansol

Местный знаток
Кто знает куда официально писать(желательно на форуме) метаквотам предложения по модернизации mql4?

Я вот что предлагаю.
PHP:
OrdersTotal(int magic=все,string symbol=любой)

дык, на mql4.com, больше некуда!Там метакватовские представители бывают хотя бы и есть ветки по всяким модернизациям. Кстати, они 529 версию запилили "с новым компилятором", не успел ты :)

Там некий модератор Renat отвечает как представитель МТ
 
Последнее редактирование:

ansol

Местный знаток
Как определить в MQL4, есть ли данный символ в окне "Обзор рынка"? Или открыто ли окно с таким символом? Ну, скажем, экзотика какая-то, причем, если окно, то обязательно с ТФ нужным, а не любое. Лучше, конечно, "Обзор рынка" - там можно убрать все символы, у которых нет открытых окон одним кликом.
 

eevviill

Заблокирован
Как определить в MQL4, есть ли данный символ в окне "Обзор рынка"? Или открыто ли окно с таким символом? Ну, скажем, экзотика какая-то, причем, если окно, то обязательно с ТФ нужным, а не любое. Лучше, конечно, "Обзор рынка" - там можно убрать все символы, у которых нет открытых окон одним кликом.
1) MarketInfo("EURUSD__j",MODE_BID)
Если нету в обзоре то 0
2) WindowHandle();
 

_SERG_

Активный участник
Как определить в MQL4, есть ли данный символ в окне "Обзор рынка"? Или открыто ли окно с таким символом? Ну, скажем, экзотика какая-то, причем, если окно, то обязательно с ТФ нужным, а не любое. Лучше, конечно, "Обзор рынка" - там можно убрать все символы, у которых нет открытых окон одним кликом.

я так.
//+------------------------------------------------------------------+
//| SYMBOLS_LIST.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

// Скрипт для проверки работоспособности.
string Currencies[] = {"AED", "AUD", "BHD", "BRL", "CAD", "CHF", "CNY",
"CYP", "CZK", "DKK", "DZD", "EEK", "EGP", "EUR",
"GBP", "HKD", "HRK", "HUF", "IDR", "ILS", "INR",
"IQD", "IRR", "ISK", "JOD", "JPY", "KRW", "KWD",
"LBP", "LTL", "LVL", "LYD", "MAD", "MXN", "MYR",
"NOK", "NZD", "OMR", "PHP", "PLN", "QAR", "RON",
"RUB", "SAR", "SEK", "SGD", "SKK", "SYP", "THB",
"TND", "TRY", "TWD", "USD", "VEB", "XAG", "XAU",
"YER", "ZAR", "_", "DJI", "DXY", "ES", "GC",
"NQ", "QG", "QM", "SI", "#"};
string Symbols[];
string MSG ="";

int start()
//int SYMBOLS_LIST()
{
int colpars = ( CreateSymbolList());
/*
for(int x = colpars - 1 ; x >= 0; x--)
{
Print( Symbols[x] );
MSG = MSG +" "+ x + " "+Symbols[x] + "\n ";
}
*/
// MSG = MSG + " " + "\n ";
for(int y = 0 ; y < colpars ; y++)
{
Print( Symbols[y] );
MSG = MSG + Symbols[y] + "|" ;
for (int j = 1; j < 34 ;j++)
{
if (j == 3) continue;
if (j == 4) continue;
if (j == 5) {MSG = MSG + TimeToStr(MarketInfo( Symbols[y], j ),TIME_DATE|TIME_SECONDS) + "|"; continue;}
if (j == 6) continue;
if (j == 7) continue;
if (j == 8) continue;
// if (j == 9) {MSG = MSG + TimeToStr(MarketInfo( Symbols[y], j ),TIME_DATE|TIME_SECONDS) + "|"; continue;}
if (j == 20) {MSG = MSG + TimeToStr(MarketInfo( Symbols[y], j ),TIME_DATE|TIME_SECONDS) + "|"; continue;}
if (j == 21) {MSG = MSG + TimeToStr(MarketInfo( Symbols[y], j ),TIME_DATE|TIME_SECONDS) + "|"; continue;}
MSG = MSG + DoubleToStr(MarketInfo( Symbols[y], j ),Digits) + "|";
}
MSG = MSG + "\n ";
MSG = MSG + "\n ";

}

// MSG = MSG + "Пары:|";
/*
for(int y = 0 ; y < colpars ; y++)
{
// Print( Symbols[y] );
MSG = MSG + Symbols[y]+ "|" ;
}
MSG = MSG + "\n ";
*/
/*
for (int k = 0 ; k < colpars ; k++)
{
for (int j = 1;j < 34 ;j++)
{
// MSG = MSG + DoubleToStr(MarketInfo( Symbols[k], j ),Digits) + "|";
MSG = MSG + DoubleToStr(MarketInfo( Symbols[k], j ),(Symbols[k], mode_Digits)) + "|";
}
MSG = MSG + "\n ";
}
*/
Comment ( MSG );
}
// [End SYMBOLS_LIST()]





int CreateSymbolList()
{
int SymbolCount = 0;
int CurrencyCount = ArrayRange(Currencies, 0);
int Loop, SubLoop;
string TempSymbol;

for(Loop = 0; Loop < CurrencyCount; Loop++)
{
for(SubLoop = 0; SubLoop < CurrencyCount; SubLoop++)
{
TempSymbol = Currencies[Loop] + Currencies[SubLoop];
if(MarketInfo(TempSymbol, MODE_BID) > 0)
{
ArrayResize(Symbols, SymbolCount + 1);
Symbols[SymbolCount] = TempSymbol;
SymbolCount++;
}
}
}
return(SymbolCount);
}
 
Последнее редактирование модератором:

qqmber

Почетный гражданин
1) MarketInfo("EURUSD__j",MODE_BID)
Если нету в обзоре то 0
Я б сказал, что если 0, то нету в обзоре.
MarketInfo() во многих случаях может вернуть правильные величины и для символов, которых в обзоре нет. Особенно это касается пар, у которых одна из валют равна валюте депозита.
Читайте файл symbols.sel, он точно содержит список из обзора и ничего больше.
 

ansol

Местный знаток
Я б сказал, что если 0, то нету в обзоре.
MarketInfo() во многих случаях может вернуть правильные величины и для символов, которых в обзоре нет. Особенно это касается пар, у которых одна из валют равна валюте депозита.
Читайте файл symbols.sel, он точно содержит список из обзора и ничего больше.
Ну вот! :nda:
Мне надо для скрипта, а тут хрень какую-то с чтением файлов разводить...
Проверим MODE_BID и хэндл и хватит. Я просто про хендл как-то не подумал, что если окна нет, то там тупо ноль должен быть.
А уж для советника-то можно постараться и обеспечить все нужные ему окна.
Вот еще бы в этот хендл как-то текст выводить по человечески, а не посимвольно, было бы ваще здорово.;)
 

qqmber

Почетный гражданин
Ну вот! :nda:
Мне надо для скрипта, а тут хрень какую-то с чтением файлов разводить...
Проверим MODE_BID и хэндл и хватит. Я просто про хендл как-то не подумал, что если окна нет, то там тупо ноль должен быть.
А уж для советника-то можно постараться и обеспечить все нужные ему окна.
Вот еще бы в этот хендл как-то текст выводить по человечески, а не посимвольно, было бы ваще здорово.;)

Если хендл нашелся, дальше можно и не проверять. Ну разве что за вычетом крайних случаев, когда окно еще есть, а символа уже нет, для скрипта неактуально.
Насчет "посимвольно" - запусти туда скрипт/индюк, и посылай ему строки, пусть выводит.
 

ansol

Местный знаток
Если хендл нашелся, дальше можно и не проверять. Ну разве что за вычетом крайних случаев, когда окно еще есть, а символа уже нет, для скрипта неактуально.
Насчет "посимвольно" - запусти туда скрипт/индюк, и посылай ему строки, пусть выводит.
Поставим вопрос по-другому: как запихать индюк в заданный хендл? Заодно и хендл(окно это в смысле) на передний план вытащить?
Так-то я могу напечатать в окне советника, увидеть, к чему надпись и открыть нужное окно, конечно.
 

AlexeyVik

Программист mql4 mql5
Поищи в недокументированных функциях.

Пример функции:
Код:
#import "user32.dll"
int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
int GetForegroundWindow();
#import
#define WM_COMMAND 0x0111

void wCommands(int com)
{
switch(com)
{
case 1: PostMessageA(GetForegroundWindow(), WM_COMMAND, [B]33309[/B], 0); return; //Обзор рынка | или [B]33160[/B]
}

Старт в скрипте или в эксперте:

int start()
{
wCommands(1);
}
Лично я не проверял работу этой строки, что произойдёт не знаю, но переключение ТФ, смена валюты в текущем окне, нажатие кнопки "Советники" работает на ура.
 
Последнее редактирование:

Маруся2014

Заблокирован
Здравствуйте мужички программисты. Хотела раскрасить фон индикатора (oscillator). Выше 0 зеленый, а ниже 0 красный. Вы не подскажите какой код надо вставить?
 

AlexeyVik

Программист mql4 mql5
Надо разделить на 2 буфера и поставить условие если выше 0 буфер1 = ... иначе если ниже 0 буфер2 = ...
 

Маруся2014

Заблокирован
А нельзя без буферов обойтись? А что именно надо разделить? Я как раз это и не понимаю к чему это самое привязать?
 

AlexeyVik

Программист mql4 mql5
Если ты не знаешь что такое буфер то в таком случае легче сделать чем объяснить.
 

Маруся2014

Заблокирован
Нет я знаю что такое буфер. Но! - у меня нет не одного свободного. Все заняты. Надо как-то по другому.
 

eevviill

Заблокирован
А нельзя без буферов обойтись? А что именно надо разделить? Я как раз это и не понимаю к чему это самое привязать?
Ну типа

PHP:
buf1[];
buf2[];


///////////////////////////////////////////////
void start()
{
for(int h=Bars-IndicatorCounted();h>=0;h--)
{
double osci=iCustom(...,h);
if(osci<0) buf1[h]=osci[h];
if(osci>0) buf2[h]=osci[h];
}


}//end start
 

Маруся2014

Заблокирован
Я реально говорю, что все восемь буферов заняты! Можно к примеру это сделать как-то через ObjectCreate или что-то подобное.
 

AlexeyVik

Программист mql4 mql5
О-о-о, это круто.
Ну какой вопрос такой и ответ.

Конечно можно обойтись и объектами, но надо-ли??? Распространённая ошибка неопытных программистов использовать буферы там где можно обойтись переменными или обычным массивом, а буферы использовать исключительно для отрисовки показаний индикатора.
Может я угадал?
 
Верх