Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Проверьте функции времени в справке Metatrader. затем попробуйте что-то вроде этого
if (TimeHour(Time[0]) TradeHourStop)
{
Comment("Торговля приостановлена - вне торговых часов");
return(false);
}
где TimeHourStart и stop - внешние переменные, заданные вами. Возврат(false); приведет к выходу из функции start без дальнейшей обработки.
Удачи,
Спасибо за быстрый ответ, Цуман.
К сожалению, на данный момент мое программирование MT4 ограничено онлайн конструктором советников.
Но это как раз то, что я искал!
Как закодировать настройку цвета текста и размера шрифта комментариев...
Привет всем,
Я работаю над советником и я только начинающий программист...
И у меня вопрос в общем, как закодировать размер шрифта и цвет текста комментариев и сделать его настраиваемым пользователем. Какие внешние переменные мне нужно создать? И как мне это запрограммировать?
Я знаю, как использовать функцию комментария, например, вот так:
if(TextOnScreen == true) Comment("Этот текст появляется на экране ");
Но как запрограммировать его так, чтобы пользователь мог изменить размер шрифта текста, который появляется на экране, а также как изменить цвет этого текста, изменив настройки в опциях советника?
Может ли кто-нибудь помочь мне с несколькими строчками кода? Буду очень признателен.
Большое спасибо.
Йохан
Привет всем,
Я работаю над советником и я только начинающий программист...
И у меня есть вопрос, как закодировать размер шрифта и цвет текста комментариев и сделать его настраиваемым пользователем. Какие внешние переменные мне нужно создать? И как мне это запрограммировать?
Я знаю, как использовать функцию комментария, например, так:
if(TextOnScreen == true) Comment("Этот текст появляется на экране ");
Но как запрограммировать его так, чтобы пользователь мог изменить размер шрифта текста, который появляется на экране, а также как изменить цвет этого текста, изменив настройки в опциях советника?
Может ли кто-нибудь помочь мне с несколькими строчками кода? Буду очень признателен.
Большое спасибо.
ЙоханВам нужно использовать графические объекты, например, lables. Как это сделать - вы можете легко прочитать в руководстве.
Привет всем,
Я работаю над советником и я только начинающий программист...
И у меня есть вопрос, как закодировать размер шрифта и цвет текста комментариев и сделать его настраиваемым пользователем. Какие внешние переменные мне нужно создать? И как мне это запрограммировать?
Я знаю, как использовать функцию комментария, например, вот так:
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("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");