Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
миш
У меня выдалась свободная минутка, и я попытался передать ваше намерение, как я его понял.
Спасибо
Спасибо ralph.ronnquist
Эти функции - именно то, что мне нужно, и они будут полезны другим людям, которым нужна такая же функция.
Я был пойман, иначе поблагодарил бы вас раньше, особенно потому, что это потребовало усилий.
Есть ли простой способ изменить функцию для работы в тестере стратегий? Я знаю, что результаты работы только с одной валютой в тестере почти бесполезны, но они очень приблизительно имитируют то, что мне нужно, чтобы получить математику правильно, любая помощь ценится, и я никогда бы не разработал код в короткие сроки, так что еще раз спасибо!
Советник на основе DT_ZZ.mq4
У меня небольшие проблемы с этим.
У меня есть индикатор DT_ZZ.mq4, и из того, что я вижу, он очень многообещающий. Я знаю, что этот индикатор перерисовывает, и вот как я вижу его работу.
Если стрелка и участок равны, то ждем закрытия бара, затем покупаем/продаем соответственно.
Кто-нибудь может помочь с этим? (Код размещен ниже)
//| DT_ZZ.mq4 |
//+------------------------------------------------------------------+
// optimized by Rosh
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Red
//---- параметры индикатора
extern int ExtDepth=12;
extern int calculateLevel=2;
//---- буферы индикатора
double zzL[];
double zzH[];
double zz[];
//+------------------------------------------------------------------+
//| Пользовательская функция инициализации индикатора |
//+------------------------------------------------------------------+
int init()
{
// IndicatorBuffers(3);
//---- настройки рисования
SetIndexStyle(0,DRAW_SECTION);
SetIndexStyle(1,DRAW_ARROW);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
//---- отображение буферов индикатора
SetIndexBuffer(0,zz);
SetIndexBuffer(1,zzH);
SetIndexBuffer(2,zzL);
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
//---- короткое имя индикатора
IndicatorShortName("DT_ZZ("+ExtDepth+")");
//---- инициализация выполнена
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int i,shift,pos,lasthighpos,lastlowpos,curhighpos,curlowpos;
double curlow, curhigh, lasthigh, lastlow;
double min, max;
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
ArrayInitialize(zz,0.0);
ArrayInitialize(zzL,0.0);
ArrayInitialize(zzH,0.0);
lasthighpos=Bars; lastlowpos=Bars;
lastlow=Low;lasthigh=High;
Print("limit=",Bars-ExtDepth);
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,shift);
curlow=Low[curlowpos];
curhighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift);
curhigh=High[curhighpos];
//------------------------------------------------
if( curlow>=lastlow ) { lastlow=curlow; }
else
{
//???? ????
if( lasthighpos>curlowpos )
{
zzL[curlowpos]=curlow;
///*
min=100000; pos=lasthighpos;
for(i=lasthighpos; i>=curlowpos; i--)
{
if (zzL==0.0) continue;
if (zzL<min) { min=zzL; pos=i; }
zz=0.0;
}
zz[pos]=min;
//*/
}
lastlowpos=curlowpos;
lastlow=curlow;
}
//--- высокий
if( curhigh<=lasthigh ) { lasthigh=curhigh;}
else
{
// ???? ?????
if( lastlowpos>curhighpos )
{
zzH[curhighpos]=curhigh;
///*
max=-100000; pos=lastlowpos;
for(i=lastlowpos; i>=curhighpos; i--)
{
if (zzH==0.0) continue;
if (zzH>max) { max=zzH; pos=i; }
zz=0.0;
}
zz[pos]=max;
//*/
}
lasthighpos=curhighpos;
lasthigh=curhigh;
}
zz[0]=Close[0];
}
//----------------------------------------------------------------------
}
else
{
int pos2;
i=0;
while (pos2<calculateLevel && i<Bars-1)
{
if (zz!=0 && (zzH!=0||zzL!=0)) pos2++;
i++;
}
pos2=i-1;
for (i=pos2-1;i>=0;i--)
{
zzH=0;
zzL=0;
zz=0;
}
if (zzH[pos2]!=0)
{
lasthighpos=pos2;
lasthigh=High[pos2];
lastlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,pos2);
lastlow=Low[lastlowpos];
}
else
{
lastlowpos=pos2;
lastlow=Low[pos2];
lasthighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,pos2);
lasthigh=High[lasthighpos];
}
//------------------------- ????????? ??????
Print("limit=",pos2-1);
for(shift=pos2-1; shift>=0; shift--)
{
curlowpos=Lowest(NULL,0,MODE_LOW,ExtDepth,shift);
curlow=Low[curlowpos];
curhighpos=Highest(NULL,0,MODE_HIGH,ExtDepth,shift);
curhigh=High[curhighpos];
//------------------------------------------------
if( curlow>=lastlow ) { lastlow=curlow; }
else
{
//???? ????
if( lasthighpos>curlowpos )
{
zzL[curlowpos]=curlow;
///*
min=100000; pos=lasthighpos;
for(i=lasthighpos; i>=curlowpos; i--)
{
if (zzL==0.0) continue;
if (zzL<min) { min=zzL; pos=i; }
zz=0.0;
}
zz[pos]=min;
//*/
}
lastlowpos=curlowpos;
lastlow=curlow;
}
//--- высокий
if( curhigh<=lasthigh ) { lasthigh=curhigh;}
else
{
// ???? ?????
if( lastlowpos>curhighpos )
{
zzH[curhighpos]=curhigh;
///*
max=-100000; pos=lastlowpos;
for(i=lastlowpos; i>=curhighpos; i--)
{
if (zzH==0.0) continue;
if (zzH>max) { max=zzH; pos=i; }
zz=0.0;
}
zz[pos]=max;
//*/
}
lasthighpos=curhighpos;
lasthigh=curhigh;
}
}
//------------------------- ????????? ??????
zz[0]=Close[0];
}
return(0);
}
//+------------------------------------------------------------------+можно ли это изменить в 4 тестере стратегий?
ralph.ronnquist
щедро предоставил мне отличную функцию, которая может быть полезна многим, кто требует ее использования.
Моя проблема в том, что я так паршиво в настоящее время в программировании я не могу, кажется, изменить его достаточно 4 тестер стратегий.
Для целей тестирования только одна валюта является удовлетворительной только для того, чтобы проработать математику сделок при различных обстоятельствах с различными валютами.
Возможно ли изменить работу Ральфа, чтобы удовлетворить эту потребность.
Спасибо
В принципе, вам нужно только изменить строку "EURCHF" на "EURUSD". Т.е. для работы с длинным "EURUSD" против короткого "EURUSD".
Я пробовал.
Спасибо за ваш ответ, но я безрезультатно пытался. Код, который вы предоставили, научил меня и мою девушку тому, как мало мы знаем о программировании!
Большое спасибо!
Хм. Единственный "недостаток", который я вижу, это тест "v == cut", который сравнивает два двойных числа на равенство. Возможно, лучше рассматривать только полные суммы в $, и таким образом изменить "euprofit", "ecprofit", "cut" и "v" на тип "int"?
Тривиальный вопрос: Я пишу новый персональный индикатор в первый раз. Я не могу просмотреть свои логи, которые я делаю с помощью команды Print ("...") в методе start{}. Где я могу просмотреть их в MetaTrader 4?
Хорошо, я использую команду Comment()...
Дамбо здесь
Привет всем
Это отличная тема для такого человека, как я, который ничего не знает о программировании. Здесь много полезной информации и много маленьких кусочков кода, которые я могу скопировать и поиграть с ними.
Я надеюсь, что кто-нибудь сможет помочь мне с этим вопросом. Я хочу сделать советника, основанного на цене. Что мне нужно ввести в код, чтобы сделать следующее:
1) Я хочу, чтобы советник смотрел на цену в 20:00 на часовом графике и смотрел, как она связана со 100sma.
2) Если цена выше 100sma, я хочу, чтобы он открыл 2 ордера на покупку на определенном уровне.
3) Эти уровни основаны на цене закрытия 16:00 свечи, поэтому если 16:00 свеча равна 1.2000, я хочу, чтобы он открыл ордера на покупку по 1.1120 и 1.2080.
У меня есть стопы, трейлинг стопы и уровни прибыли, все разработано и все такое, все коды взяты из этой темы. Поэтому я благодарю тех, кто их опубликовал. I
Я буду вечно в долгу, если кто-то сможет мне помочь.
С уважением
Сьюзан
Помогите
Привет всем
Я пытался создать советника и получил следующее сообщение об ошибке:
'\end_of_program' - ending bracket '}' expected C:\...\My_First_EA.mq4(96,1)
Я дважды щелкнул по ней, добрался до строки, затем проверил ее с открывающими и завершающими скобками перед ней, и все еще не знаю, где я допустил ошибку.
Это второй советник, который я пробовал, с тем же сообщением об ошибке, основанный на том же индикаторе.
Спасибо.