[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 229

 
nikkola >>:

Я не декомпилил, он в таком виде мне достался...

Это абсолютно ничего не меняет.

 
странно, само прошло, но всё равно спасибо TheXpert, буду знать, что за ошибка
 
nikkola >>:

Я не декомпилил, он в таком виде мне достался...

И вообще, экспертов такого рода даже на этом ресурсе навалом и с открытым кодом. Это был какой-то сливной ЕА, работал на пересечении цены и машки. Я подставил вместо машки другой индикатор, вот и все. И столкнулся вот с проблемой.

 
и ещё один вопросик, кто-нить знает, есть ли где котировки в заархивированном виде, а то у меня инет не резиновый, кончается ^_^
 
nikkola >>:

Здравствуйте, помогите плз не могу понять... Есть советник, работает по сигналам осциллятора, открывает позиции после пересечения нуля. Надо заставить его открывать позу когда текущий бар закрылся и сигнал сформировался, а то болтается туду-сюда, в минуту может открыть и закрыть позицию несколько раз :) пока сигнал не устаканится.

вот такой код:


extern double Lot = 0.1;
extern double Per = 14;
bool gi_84 = TRUE;
int gi_88 = 366;
double gd_92 = 0.02;
double gd_100 = 0.2;
int g_period_108 = 14;
int gi_112 = 50;
int g_slippage_116 = 0;



void start() {
int l_cmd_52;
int l_ticket_56;

string l_symbol_0 = Symbol();
double l_isar_8 = iCustom(NULL,0,"daytrend-t01",Per,0,0);
double l_isar_9 = iCustom(NULL,5,"daytrend-t01",Per,0,0);
int l_cmd_40 = -1;
int l_ord_total_44 = OrdersTotal();
Lot = MathMax(Lot, MarketInfo(l_symbol_0, MODE_MINLOT));
for (int li_48 = l_ord_total_44; li_48 > 0; li_48--) {
if (OrderSelect(li_48 - 1, SELECT_BY_POS) == TRUE) {
l_cmd_52 = OrderType();
if (OrderSymbol() != l_symbol_0 || l_cmd_52 < OP_BUY || l_cmd_52 > OP_SELL) continue;
l_ticket_56 = OrderTicket();
RefreshRates();
if (l_cmd_52 < OP_SELL) {
if (l_isar_8 > 0) {
while (OrderClose(l_ticket_56, Lot, Bid, g_slippage_116) == 0) FunError(gi_112);
l_cmd_40 = -1;
continue;
}
} else {
if (l_isar_8 < 0 ) {
while (OrderClose(l_ticket_56, Lot, Ask, g_slippage_116) == 0) FunError(gi_112);
l_cmd_40 = -1;
continue;
}
}
l_cmd_40 = l_cmd_52;
}
}
if (l_cmd_40 < OP_BUY && g_period_108 == 0 || DayOfYear() < gi_88) {
RefreshRates();
if (l_isar_8 < 0 && l_isar_9 < 0 ) while (OrderSend(l_symbol_0, OP_BUY, Lot, Ask, g_slippage_116, 0, 0) == 0) FunError(gi_112);
else
if (l_isar_8 > 0 && l_isar_9 > 0 ) while (OrderSend(l_symbol_0, OP_SELL, Lot, Bid, g_slippage_116, 0, 0) == 0) FunError(gi_112);
}
}

void FunError(int ai_0) {
Sleep(ai_0);
RefreshRates();
}

void deinit() {
}

Я для этого пользуюсь следующим кодом:


bool Fun_New_bar()
/*
функция созданна для определения наличия нового бара,
если поймали новый бар то "true" иначе "false".
===========
Переменные:
===========
Test_Time - тестируемое время
*/
{
static datetime Test_Time=0;
if(Test_Time!=Time[0])
{
Test_Time=Time[0];
return(true);
}
return(false);
}


По моему вопросу помогите кто знает или скажите что это невозможно если действительно нельзя так сделать... а то 3 дня уже ответ ищу и пока безрезультатно. :-(

 
betmen >>:

По моему вопросу помогите кто знает или скажите что это невозможно если действительно нельзя так сделать... а то 3 дня уже ответ ищу и пока безрезультатно. :-(

Для настройки параметров используется Custom UI. Т.е. окно, которое было специально разработано под конкретную задачу (под конкретные индикаторы). В метатрейдере возможностей создавать такие окна нет. Значит, создавать их нужно где-то еще, с получением выполнимого файла. Выполнимый файл может быть либо Exe, либо Dll. Dll можно вызывать при старте индикатора / скрипта, это явно удобнее.

 
jartmailru >>:

Для настройки параметров используется Custom UI. Т.е. окно, которое было специально разработано под конкретную задачу (под конкретные индикаторы). В метатрейдере возможностей создавать такие окна нет. Значит, создавать их нужно где-то еще, с получением выполнимого файла. Выполнимый файл может быть либо Exe, либо Dll. Dll можно вызывать при старте индикатора / скрипта, это явно удобнее.

Спасибо!!!

Окошко на делфях собрать не проблема, вопрос теперь как настроить интерфейс между объектами на "main form" и переменными в MQL4 если поделитесь ссылочкой на статью где это описывается я просто лопну от благодарности... :-)

 
betmen >>:

Спасибо!!!

Окошко на делфях собрать не проблема, вопрос теперь как настроить интерфейс между объектами на "main form" и переменными в MQL4 если поделитесь ссылочкой на статью где это описывается я просто лопну от благодарности... :-)

Ну, у меня такое впечатление, что оптимально Dll проинитить,  

показать модально может оказаться опасно (индикатор он на UI thread'е, можете получить последствия)-

а может и нет... в общем, форму можно запустить в отдельном среде- с Wtl всё получилось супер.

Индикатор будет ждать флажка, что ему разрешено работать и будет опрашивать эту форму.

А потом- когда форма покажет готовность- есть разные функции типа get(int & to[]), с указателями/ссылками,

которые перекинут разные данные. Со строками, возможно будет беда...

А ссылочкой на статью Вы со мной сами поделитесь ;-).

 
jartmailru >>:

Ну, у меня такое впечатление, что оптимально Dll проинитить,

показать модально может оказаться опасно (индикатор он на UI thread'е, можете получить последствия)-

а может и нет... в общем, форму можно запустить в отдельном среде- с Wtl всё получилось супер.

Индикатор будет ждать флажка, что ему разрешено работать и будет опрашивать эту форму.

А потом- когда форма покажет готовность- есть разные функции типа get(int & to[]), с указателями/ссылками,

которые перекинут разные данные. Со строками, возможно будет беда...

А ссылочкой на статью Вы со мной сами поделитесь ;-).

Вопрос в заключался как стандартные индикаторы рисуют новую вкладку "Параметры" при выборе настроек работы самого индикатора с возможностью заменить чисел на что то более читаемое.

К примеру если вызвать МА:


в коде индикатора это переменная "MA_Method" и выбор метода идет по условию


switch(MA_Method)
{
case 1 : short_name="EMA("; draw_begin=0; break;
case 2 : short_name="SMMA("; break;
case 3 : short_name="LWMA("; break;
default :
MA_Method=0;
short_name="SMA(";


Вы предлагаете при инициализации запустить exe скомпилированный из другой среды разработки, как вариант действительно приемлемо во время инициализации советника запускать какой то exe файл, но тогда встает другая проблема как передавать данные из программы в переменные самого индикатора?

то есть как значение combobox1.text преобразованное в число, передать в MA_Method?

Через файл как то неэстетично, а общего пространства памяти вроде как у MetaTrader и созданного мной "test.exe" нет.

 
Rita писал(а) >>

Благодарю. Сейчас попробую.

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

Да, - поллучилось. Заработали эксперты.

А у меня не помогло :-( по прежнему появляется извинение за ошибку и закрывается МТ

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