
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я пробовал несколько раз на аккаунте Alpari, никаких ошибок. Только один раз, когда я поместил скрипт в каталог экспертов и запустил от имени эксперта.
Это потому, что я спросил вас о каталогах.
Извините.Я думаю, я понял, в чем проблема. У меня windows vista, и я обычно делаю "запуск от имени администратора". Я попробовал без этого и, кажется, теперь все работает нормально.
Передача массива из MT4 .mq4 в C++ DLL
Помогите пожалуйста.
У меня проблема с передачей одного массива, содержащего 8 значений индикатора, в C++ DLL. Это очень просто, но я получаю -1 при вызове функции
Forexindex(), которая на самом деле вызывает импортированную функцию gepModel ( d [] ) из DLL. Функция ForexIndex должна возвращать 0 или 1 из DLL.
Я подозреваю, что я делаю что-то неправильно в файле .mq4 в функции Forexindex() . Любая помощь будет высоко оценена. Ниже приведен простой код. DLL файл C++ в порядке, он компилируется без ошибок, так что проблема в mq4 файле.
================================MQ4 file====================
#import "JadeClass.dll"
int gepModel( double& d[] );
#import
int start()
{
........
........
........
ForexIndex();
.......
......
......
.....
}
int ForexIndex()
{
int myindex;
double ind[] , MA_Close, MA_High, MA_Low, MA_Open, Macd, Rsi, Stoch, Vol;
int counted_bars=IndicatorCounted();
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
int pos=Bars-counted_bars;
MA_Close = iMA(NULL,PERIOD_M5,8,0,0,0,0,0) ;
MA_High = iMA(NULL,PERIOD_M5,8,0,0,0,0,0) ;
MA_Low = iMA(NULL,PERIOD_M5,8,0,0,0,0,0) ;
MA_Open = iMA(NULL,PERIOD_M5,8,0,0,0,0,0) ;
Macd = iMACD(NULL,PERIOD_M5,12,26,9,0,0,0,0);
Rsi = iRSI(NULL,PERIOD_M5,10,0,0,0);
Stoch = iStochastic(NULL,PERIOD_M5,14,3,3,0,0,0,0);
Vol = iVolume(NULL,PERIOD_M5,0);
while(pos>=0)
{
ind[0] = MA_Close;
ind[1] = MA_High;
ind[2] = MA_Low;
ind[3] = MA_Open;
ind[4] = Macd;
ind[5] = Rsi;
ind[6] = Stoch;
ind[7] = Vol;
myindex = gepModel(ind);
pos--;
}
Print( " Myindex = " , myindex);
return (myindex);
}
=========================DLL Исходный код ===========================
#include "stdafx.h"
#include "JadeClass.h"
#include
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define MT4_EXPFUNC __declspec(dllexport)
// Единственный и неповторимый объект CJadeClassApp
CJadeClassApp theApp;
MT4_EXPFUNC int __stdcall gepModel(double d[]);
MT4_EXPFUNC int __stdcall gepModel(double d[])
{
.....
.....
.....
.....
}
============================ Файл Def для исходного кода DLL ===================
; JadeClass.def : Объявляет параметры модуля для DLL.
LIBRARY "JadeClass"
ЭКСПОРТЫ
; Явные экспорты могут находиться здесь
gepModel
========================================
Нужна помощь в добавлении кода только для одной сделки на сигнал
Я только изучаю код mq4 и потратил много часов, пытаясь понять, как добавить только одну сделку на сигнал. Я попробовал несколько способов, но не могу заставить его совершать только одну сделку. Например, если TP достигнут, он разместит еще одну сделку в ту же сторону, потому что сигнал все еще хороший. Я бы хотел, чтобы он ждал обратного сигнала, а затем заключал сделку. Я приложил советник без изменений. Заранее спасибо за помощь. Марти
Я только изучаю код mq4 и потратил много часов, пытаясь понять, как закодировать только одну сделку на сигнал. Я попробовал несколько способов, но не могу заставить его совершать только одну сделку. Например, если TP достигнут, он разместит еще одну сделку в ту же сторону, потому что сигнал все еще хороший. Я бы хотел, чтобы он ждал обратного сигнала, а затем размещал эту сделку. Я приложил советник без изменений. Заранее спасибо за помощь. Марти
Я узнал, как это делается, недавно на сайте mql4.com после того, как у меня возникли проблемы со слишком большим количеством открытых сделок на одном баре. Статьи на mql4 очень помогли мне в самом начале, плюс у них есть база данных кодов, которая дает вам хорошие примеры для работы. На этом сайте есть отличная история сообщений и несколько действительно хороших кодеров, просто воспользуйтесь поиском и нажмите кнопку "отобразить как сообщения", это сэкономит вам время на просмотре страниц темы в поисках нужного вам ответа. Что касается вашей проблемы, просто используйте этот код:
if(Bars<BarsCount)
{
//Code to do once goes here
BarsCount=Bars;
}
[/CODE]
Personally I'm having problems with an array. I cant for the life of me figure out why the following code returns 0 all the time... Any help would be much appreciated. I'm trying to create an array of length STD_MA_Period+1 to later use with iMAOnArray but it doesnt work so its back to the drawing board I guess.
[CODE]for(i=0;i<=STD_MA_Period+1;i++)
{
STD_MA_Buffer=iStdDev(Symbol(),Period(),STD_Period,0,MODE_SMA,PRICE_CLOSE,i);
}
Print(STD_MA_Buffer[1]);PS double STD_MA_Buffer[]; определяется в разделе глобальных переменных.
исправьте мой советник, пожалуйста
у меня есть некоторые идеи, но я могу записать их в код mql4, не могли бы вы мне помочь?????
вот моя проблема
вот определение моей системы:
A. если ордера=0 >> OP buy && OP sell
B. создать сетку по условию + или -
например, если OPbuy + grid = OPbuy
если OPbuy - сетка = OPsell
то же самое для OPsell
C. если прибыль > 0 && прибыль > минимальной прибыли (блокировка прибыли)
остановите любой ордер (OP buy || OP sell) и переместите трейлинг эквити или точку прибыли.
D. закрытие по прибыли может быть по эквити или по пункту
E. Формат .mq4, потому что я хочу знать, где моя ошибка.
У меня проблема в точке B. Пожалуйста, помогите мне.
У меня есть некоторые идеи, но я могу написать их в mql4 код, вы можете помочь мне?????
это моя проблема
вот определение моей системы:
A. если ордера=0 >> OP buy && OP sell
B. сделать сетку по условию + или -
например, если OPbuy + grid = OPbuy
если OPbuy - сетка = OPsell
то же самое для OPsell
C. если прибыль > 0 && прибыль > минимальной прибыли (блокировка прибыли)
остановите любой ордер (OP buy || OP sell) и переместите трейлинг эквити или точку прибыли.
D. закрытие по прибыли может быть по эквити или по пункту
E. формат .mq4, потому что я хочу знать, где моя ошибка.
У меня проблема с пунктом В. Пожалуйста, помогите мнеКак насчет того, чтобы прислать исходный код вместо ex4?
Как насчет того, чтобы отправить исходный код вместо ex4?
просто покажите мне, как это закодировать,
это мое последнее подробное заявление
исправьте это.rar
Я надеюсь, что это может понять мой советник, проблема, что цикл на OP продать почему ????
вопрос олинии тренда
Новичок в кодировании и просто делаю вещи для практики, я хотел остановить линию тренда на текущем баре. То, что я придумал, это просто изменить цвет линии на текущем баре на цвет фона. По сути, я просто сливаю линию за баром с фоном и заставляю ее исчезнуть в этой точке.
Поэтому теперь я спрашиваю экспертов, как правильно это сделать. Я знаю, что есть много способов добиться того же самого, поэтому я просто хочу увидеть другие идеи о том, что я мог бы сделать, в попытке узнать больше.
Спасибо
Очень странное поведение кода MQL
Привет всем,
Metatrader Version: 4.00 Build 224 (15 мая 2009)
Metaeditor Версия: 4.00 Build 224 (14 мая 2009)
Я столкнулся с очень странной ошибкой в MQL, которая меня полностью озадачила, настолько, что я пересматриваю весь свой старый код, чтобы убедиться, что он написан так, чтобы избежать этой проблемы.
Я надеюсь, что кто-нибудь сможет пролить свет на то, что именно здесь происходит.
Вот код, простой индикатор, который по сути ничего не делает. Однако в разделе init() я разместил вызов двух функций, когда период графика равен H1.
Эти две функции идентичны во всех отношениях, кроме одного. В одной из них определен статический массив int, а в другой - нестатический массив int. Все, что делают функции, это выводят размер своего локально определенного массива, присваивают некоторые значения элементам массива и затем выводят их.
#property indicator_chart_window
void afunc() {
int i;
int array[4];
array[0] = 100;
array[1] = 101;
array[2] = 102;
array[3] = 103;
Print("afunc array[4] size="+ArraySize(array));
for (i = 0; i < 4; i++) {
Print("afunc array["+i+"]="+array);
}
}
void afunc_static() {
int i;
static int array[4];
array[0] = 100;
array[1] = 101;
array[2] = 102;
array[3] = 103;
Print("afunc_static array[4] size="+ArraySize(array));
for (i = 0; i < 4; i++) {
Print("afunc_static array["+i+"]="+array);
}
}
int init() {
if (Period() == PERIOD_H1) {
afunc();
afunc_static();
}
return(0);
}
int deinit() {
return(0);
}
int start() {
return(0);
}
Если посмотреть на код, то не должно быть никаких обстоятельств, при которых эти две функции вели бы себя по-разному.
Однако, если я прикреплю индикатор к графику M5, а затем переключусь на таймфрейм H1, то получу следующий результат.
2009.05.23 18:12:47 afunc EURUSD,H1: initialized
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[3]=103
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[2]=102
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[1]=101
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[0]=100
2009.05.23 18:12:47 afunc EURUSD,H1: afunc_static array[4] size=4
2009.05.23 18:12:47 afunc EURUSD,H1: afunc массив[3]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[2]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[1]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[0]=0
2009.05.23 18:12:47 afunc EURUSD,H1: afunc array[4] size=0
2009.05.23 18:12:47 afunc EURUSD,M5: uninit reason 3
2009.05.23 18:12:47 afunc EURUSD,M5: деинициализация
2009.05.23 18:12:45 afunc EURUSD,M5: инициализирована
2009.05.23 18:12:43 afunc EURUSD,M5: успешно загружен
Обратите внимание, что, несмотря на то, что я определил 'int array[4]' в afunc(), размер этого массива фактически равен НУЛЮ, и я не могу присвоить значения элементам массива. Очевидно, что эта функция работает не так, как ожидалось.
Обратите внимание, что я определил 'static int array[4]' в afunc_static() и размер правильно отображается как 4, как и значения, которые я присвоил элементам массива. Эта функция работает нормально.
Итог. Если вы определяете нестатический массив в функции и если эта функция не вызывается вашим индикатором, то у вас может возникнуть проблема.
Если вы впоследствии переключите таймфрейм графика, а затем вызовете функцию, то размер любых локально определенных массивов в функции будет равен нулю, независимо от того, какой размер массивов вы определили.
Единственный способ обойти эту проблему, насколько я могу судить, это убедиться, что все локально определенные массивы в ваших функциях определены как статические массивы. Я знаю, что это глупо, но я не вижу другого способа избежать этой проблемы.
Я буду очень признателен за любые отзывы по этому вопросу.
С уважением,
Лоранс.