Спрашивайте! - страница 148

 

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

Исходный код включает следующее:

int total=OrdersTotal();

if(total<1)

И я думаю, что именно здесь и кроется проблема. Если я увеличиваю число, то просто исполняется несколько ордеров на одном и том же баре (M15) для одной и той же пары. Если оставить if(total<1), то это не позволит одновременное исполнение ордеров на разных парах.

Могу ли я изменить что-то в тике или баре, чтобы разрешить только один ордер за раз на пару, но несколько ордеров для всех пар, к которым прикреплен советник (с разным магическим числом)?

Спасибо всем, кто может помочь или предложить свой вариант!

Чили

 

Запутался в нескольких операторах if

///////////////////// НАЧАЛО ТОРГОВЛИ В ВОСКРЕСЕНЬЕ/////////////////////////

StartDay=7; StartHour=1; StartMinute=55;

{

if(TimeDayOfWeek(TimeCurrent())==StartDay)

{

if(TimeHour(TimeCurrent())==StartHour)

{

if(TimeMinute(TimeCurrent())==StartMinute)

{

}

}

}

}

Я пытаюсь заставить советника активироваться, когда наступает седьмой день (Day 7), час 1 (Hour 1) и 55 минут (55 minutes). Что я делаю не так? Сегодня я включил компьютер, и советник начал торговать сразу же (до часа 1)! Пожалуйста, помогите.

Спасибо!

Дэйв

 
JForex78:
Привет,

Я хочу знать, как я могу построить пересечение МА младшего таймфрейма на графике старшего таймфрейма.

Например, я хочу построить стрелку на графике H1, когда MA5 и MA10 M15 пересекаются.

Пожалуйста, дайте мне знать.

Спасибо,

JForex.

MA на любом графике - это просто более высокая/низкая версия MA на более высоком/низком таймфрейме. Например, если вы нанесли 60MA на 5-минутный график, но хотите посмотреть, как она выглядит на часовом графике, то просто умножьте 60 на 12 (5-минутные интервалы в часе). Таким образом, 720 MA на часовом графике - это то же самое, что 60 MA на 5-минутном графике.

Понятно?

Люкс

 
1Dave7:
///////////////////// НАЧАЛО ТОРГОВЛИ В ВОСКРЕСЕНЬЕ/////////////////////////

StartDay=7; StartHour=1; StartMinute=55;

{

if(TimeDayOfWeek(TimeCurrent())==StartDay)

{

if(TimeHour(TimeCurrent())==StartHour)

{

if(TimeMinute(TimeCurrent())==StartMinute)

{

}

}

}

}

Я пытаюсь заставить советника активироваться, когда наступает седьмой день (Day 7), час 1 (Hour 1) и 55 минут (55 minutes). Что я делаю не так? Сегодня я включил компьютер, и советник начал торговать сразу же (до часа 1)! Пожалуйста, помогите.

Спасибо!

Дэйв

Посмотрите еще раз файл справки.

Возвращает текущий день недели на основе нуля (0-воскресенье,1,2,3,4,5,6) последнего известного времени сервера.

Люкс

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

Оригинальный код включает следующее:

int total=OrdersTotal();

if(total<1)

И я думаю, что проблема заключается именно в этом. Если я увеличиваю число, то это просто исполняет несколько ордеров на одном баре (M15) для одной и той же пары. Если оставить if(total<1), то это не позволит одновременное исполнение ордеров на разных парах.

Могу ли я изменить что-то в тике или баре, чтобы разрешить только один ордер за раз на пару, но несколько ордеров для всех пар, к которым прикреплен советник (с разным магическим числом)?

Спасибо всем, кто может помочь или предложить свой вариант!

Чили

OrdersTotal - это встроенная функция, которая не учитывает магическое число. Вам нужно написать свою собственную функцию, которая использует OrdersTotal, но фильтрует по магическому числу и, возможно, символу. Здесь и в других местах есть много примеров.

Удачи.

Lux

 
luxinterior:
Посмотрите еще раз файл справки. Люкс

Я изменил StartDay на 0, и изменил StartHour на текущий час GMT моего брокера, и изменил StartMinute на 5 минут раньше минут GMT - Он все еще работает, когда время GMT совпадает с моим временем начала. Я просмотрел файлы справки, но в них не показан множественный оператор if. Множественные операторы if всегда ставят меня в тупик. Что, черт возьми, я делаю не так? Я хочу, чтобы программа не торговала до соответствующего времени начала торгов в воскресенье и делала комментарий "Неторговое время" до тех пор, пока время не будет соответствовать времени начала торгов в воскресенье.

Сильно запутался!!!

?????

 
luxinterior:
OrdersTotal - это встроенная функция, которая не учитывает магическое число. Вам нужно написать свою собственную функцию, которая использует OrdersTotal, но фильтрует по магическому числу и, возможно, символу. Здесь и в других местах есть много примеров.

Удачи.

Lux

Вот один из них, который я сделал и использовал довольно часто:

int OTBM(int intMagic)//OrdersTotalByMagic

{

int intCount=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) intCount++;

intPOS++;

}

else

boolTerm=true;

}

return(intCount);

}

[/PHP]

And if you want to close only a certain order by magic number:

int CBM(int intMagic)//CloseByMagic

{

int intOffset=0;

int Count = OTBM(intMagic);

while(OTBM(intMagic)>0 && Count > 0)

{

OrderSelect(intOffset,SELECT_BY_POS);

if(OrderMagicNumber()==intMagic)

{

if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),999,Red);

else if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),999,Orange);

Count--;

}

else {

intOffset++;

}

}

return(0);

}

Order Profit By Magic:

[PHP]double OPBM(int intMagic)//OrderProfitByMagic

{

double dblProfit=0;

int intPOS=0;

bool boolTerm=false;

while(boolTerm==false)

{

if(OrderSelect(intPOS,SELECT_BY_POS))

{

if(OrderMagicNumber()==intMagic) dblProfit=dblProfit+OrderProfit();

intPOS++;

}

else

boolTerm=true;

}

return(dblProfit);

}

Надеюсь, это поможет.

 
luxinterior:
MA на любом графике - это просто более высокая/низкая версия MA на более высоком/низком таймфрейме. Например, если вы нанесли 60MA на 5-минутный график, но хотите посмотреть, как она выглядит на часовом графике, то просто умножьте 60 на 12 (5-минутные интервалы в часе). Таким образом, 720 MA на часовом графике - это то же самое, что 60 MA на 5-минутном графике.

Имеет смысл?

Lux

Абсолютно логично. Как вы увидите M5 10MA на графике H1?

10/12=0.84. Можете ли вы нанести МА 0,84 на график H1? Нет.

Но это работает в обратную сторону - H1 10MA = M5 120MA.

Поэтому мой вопрос в том, как я могу увидеть пересечение 5MA на более высоком таймфрейме, например H4.

Спасибо.

 
 

цикл for на MQL4

Читая курс MQL4 от Coders' Guru, я наткнулся на эту часть о цикле 'for' в уроке 5, которая меня смутила. Там говорится, что может быть только одно тестовое выражение. Но в приведенных примерах содержится 2 тестовых выражения.

int i;

int j;

for(i=0,j=0;i<15,i<;i++,j++)

Print(i);

int i;

for(i=15;i>0,i<;i--)

Print(i);

Кто-нибудь может просветить?

Спасибо.

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