Как кодировать? - страница 257

 

Проверьте функции времени в справке Metatrader. затем попробуйте что-то вроде этого

if (TimeHour(Time[0]) TradeHourStop)

{

Comment("Торговля приостановлена - вне торговых часов");

return(false);

}

где TimeHourStart и stop - внешние переменные, заданные вами. Возврат(false); приведет к выходу из функции start без дальнейшей обработки.

Удачи,

 

Спасибо за быстрый ответ, Цуман.

К сожалению, на данный момент мое программирование MT4 ограничено онлайн конструктором советников.

Но это как раз то, что я искал!

 

Как закодировать настройку цвета текста и размера шрифта комментариев...

Привет всем,

Я работаю над советником и я только начинающий программист...

И у меня вопрос в общем, как закодировать размер шрифта и цвет текста комментариев и сделать его настраиваемым пользователем. Какие внешние переменные мне нужно создать? И как мне это запрограммировать?

Я знаю, как использовать функцию комментария, например, вот так:

if(TextOnScreen == true) Comment("Этот текст появляется на экране ");

Но как запрограммировать его так, чтобы пользователь мог изменить размер шрифта текста, который появляется на экране, а также как изменить цвет этого текста, изменив настройки в опциях советника?

Может ли кто-нибудь помочь мне с несколькими строчками кода? Буду очень признателен.

Большое спасибо.

Йохан

 
korthouj:
Привет всем,

Я работаю над советником и я только начинающий программист...

И у меня есть вопрос, как закодировать размер шрифта и цвет текста комментариев и сделать его настраиваемым пользователем. Какие внешние переменные мне нужно создать? И как мне это запрограммировать?

Я знаю, как использовать функцию комментария, например, так:

if(TextOnScreen == true) Comment("Этот текст появляется на экране ");

Но как запрограммировать его так, чтобы пользователь мог изменить размер шрифта текста, который появляется на экране, а также как изменить цвет этого текста, изменив настройки в опциях советника?

Может ли кто-нибудь помочь мне с несколькими строчками кода? Буду очень признателен.

Большое спасибо.

Йохан

Вам нужно использовать графические объекты, например, lables. Как это сделать - вы можете легко прочитать в руководстве.

 
korthouj:
Привет всем,

Я работаю над советником и я только начинающий программист...

И у меня есть вопрос, как закодировать размер шрифта и цвет текста комментариев и сделать его настраиваемым пользователем. Какие внешние переменные мне нужно создать? И как мне это запрограммировать?

Я знаю, как использовать функцию комментария, например, вот так:

if(TextOnScreen == true) Comment("Этот текст появляется на экране ");

Но как запрограммировать его так, чтобы пользователь мог изменить размер шрифта текста, который появляется на экране, а также как изменить цвет этого текста, изменив настройки в опциях советника?

Может ли кто-нибудь помочь мне с несколькими строчками кода? Буду очень признателен.

Большое спасибо.

Йохан

Йохан,

Изучите прилагаемый индикатор.

Часть кода предназначена для использования шаблона.

Я обнаружил это на собственном опыте, когда текст одной пары появился на графике другой пары из-за шаблона.

Если требуется больше строк текста, вы должны быть в состоянии понять это.

Если нет, напишите еще раз, и я покажу пример с несколькими строками.

Роберт

Файлы:
 

почему закрытие ордера не происходит и как ограничить ордер?

Я новичок в MQL4, только что протестировал свой советник, но похоже, что он не может закрыть ордер, и он открывает ордер на каждом баре, пока freemargin не станет 0, затем он принудительно останавливает все ордера. Я не знаю, как ограничить количество открытых ордеров NO. Кто может подсказать, спасибо TKS!

код следующий:

//+------------------------------------------------------------------+

//| Moving Average.mq4 |

//| Copyright ?2005, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

//+------------------------------------------------------------------+

#define MAGICMA 2010309

extern double Lots = 1;

extern double MaximumRisk = 0.02;

extern double DecreaseFactor = 10;

//+------------------------------------------------------------------+

//| Вычислить открытые позиции |

//+------------------------------------------------------------------+

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) buys++;

if(OrderType()==OP_SELL) sells++;

}

}

//---- возврат объема ордеров

if(buys>0) return(buys);

else return(sells);

}

//+------------------------------------------------------------------+

//| Вычисляем оптимальный размер лота |

//+------------------------------------------------------------------+

double LotsOptimized()

{

double lot=Lots;

int orders=HistoryTotal(); // общее количество ордеров на истории

int losses=0; // количество ордеров с потерями без перерыва

//---- выбор размера лота

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

Print(MarketInfo(Symbol(), MODE_LOTSIZE));

Print(MarketInfo(Symbol(), MODE_MINLOT));

Print(MarketInfo(Symbol(), MODE_LOTSTEP));

Print(MarketInfo(Symbol(), MODE_MAXLOT));

//---- подсчитываем количество убыточных ордеров без перерыва

if(DecreaseFactor>0)

{

for(int i=orders-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Ошибка в истории!"); break; }

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;

//----

if(OrderProfit()>0) break;

if(OrderProfit()<0) losses++;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

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

//модифицируйте их следующим образом:accountfreemargin()-orderprofit()

}

//---- возвращает размер лота

if(lot<1) lot=1;

return(lot);

}

//+------------------------------------------------------------------+

//| Проверка условий открытого ордера |

//+------------------------------------------------------------------+

void CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2;

int res;

//---- торговля ведется только на первых тиках нового бара

if(Volume[0]>1) return;

//---- получаем скользящую среднюю

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//---- условия продажи

if (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "My order #1",MAGICMA,0,Red);

return;

}

if (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "My order #2",MAGICMA,0,Yellow);

return;

}

//---- условия покупки

if ( m1>m3+0.0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #1",MAGICMA,0,Blue);

return;

}

if (m2>m4+0.0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #2",MAGICMA,0,Green);

return;

}

//----

}

//+------------------------------------------------------------------+

//| Проверка условий закрытия ордера |

//+------------------------------------------------------------------+

void CheckForClose()

{

double m1,m2,m3,m4;

//---- торгуйте только на первых тиках нового бара

if(Volume[0]>1) return;

//---- получаем скользящую среднюю

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;

//---- проверка типа ордера

if(OrderType()==OP_BUY)

{

if(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

break;

}

if(m2<m4+0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

}

if(OrderType()==OP_SELL)

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan);

break;

}

if(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon);

break;

}

}

}

//----

}

//+------------------------------------------------------------------+

//| Функция запуска |

//+------------------------------------------------------------------+

void start()

{

//---- проверка истории и торговли

if(Bars<55 || IsTradeAllowed()==false) return;

//---- вычисляем открытые ордера по текущему символу

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();

else CheckForClose();

//----

}

//+------------------------------------------------------------------+

 

Определить версию Windows

Есть ли у кого-нибудь простой способ узнать, на какой версии windows работает MT4, используя только вызов API windows.

Кто-нибудь может подсказать мне, как сделать так, чтобы это работало:

#import "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#import

Функция GetVersionEx (Windows)

Спасибо

 

Требуется помощь. Небольшая корректировка моего советника CCI Divergence EA

У меня есть советник CCI Divergence EA, который использует пользовательский индикатор CCI Divergence в папке Indicators в MT4, чтобы определить, когда размещать сделку.

Я хочу вместо него использовать пользовательский индикатор Stochastics Divergence Indicator (который у меня есть).

Я не знаю, как изменить код эксперта, чтобы направить его на индикатор Stochastics Divergence в папке индикаторов.

Во входах советника, я думаю, мне нужно заменить:

extern int CCI_Period = 10;

на

extern int Stoch_K = 5;

extern int Stoch_D = 3;

extern int Stoch_Slowing = 3;

В основной части кода я нашел область, которая указывает на пользовательский индикатор CCI Divergence в папке Indicators:

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 0, 2);

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 1, 2);

Я знаю, что должен изменить "CCI_Divergence_Indicator" на "Stochastics_Divergence_Indicator", который является именем пользовательского индикатора дивергенции стохастика в папке Indicators. И я должен удалить CCI_Period и 9.

Но я не знаю, как добавить Stoch_K, Stoch_D и Stoch_Slowing в эту часть кода.

Я пытался изменить их самостоятельно, но тогда советник не открывается.

Кто-нибудь знает, как изменить эту часть кода, чтобы индикатор дивергенции стохастика мог заменить индикатор дивергенции cci?

Я заплатил программисту за создание советника, но он очень занят другими проектами клиентов. Поэтому, когда дело доходит до мелких изменений/исправлений, у него нет времени сделать это для меня - по крайней мере, не сразу. Поэтому я и спрашиваю здесь.

Индикатор дивергенции CCI имеет слишком много ложных сигналов. Индикатор дивергенции Стохастика намного лучше. Вот почему я хочу поменять индикатор.

Заранее спасибо.

 

Помогите пожалуйста

У меня есть строка кода, которая оповещает меня, когда цена на 1 баре (будь то 1м 5м 189м) перемещается на 200 пунктов в 1 баре. но я не могу понять, как настроить ее на оповещение ТОЛЬКО в определенном направлении. вот она...

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); //Это работает нормально.

Но я хочу иметь возможность различать 200 пунктов UP и 200 пунктов DOWN. Я читал, спрашивал на форумах, был в чатах и сводил себя с ума в течение 3 дней. Я с этим покончил, пожалуйста, ради бога, помогите мне.

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");