Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я завершил свой советник с вашей помощью Спасибо еще раз
Здравствуйте, mLaden,
Спасибо еще раз за вашу большую помощь
Я завершил свой советник с вашей помощью Спасибо еще раз
ThanXXXXXXXXXXXX
Перекрашивание индикаторов
Я разместил этот вопрос в этой теме 'Помощь по кодированию' пару недель назад, но не получил ответа.
Большинство индикаторов MTF перерисовываются, некоторые больше, чем другие. У меня есть один, который перерисовывается незначительно, но имеет один фактор, который очень хорош и может быть включен в метод. Проблема в том, что мне нужно постоянно вручную обновлять/перерисовывать его, чтобы он имел смысл. Есть ли способ закодировать автоматическое обновление каждый тик или каждые 'x' секунд/тактов?
В настоящее время, чтобы обновить график, я либо меняю время графика, а затем возвращаюсь назад, либо перехожу на вкладку Charts/Refresh, либо добавляю другой индикатор на график и удаляю предыдущий one....... снова и снова! Очень трудоемко!
Если есть способ сделать это автоматическое обновление, я поделюсь тем, что я нашел.............
Спасибо,
el bee
...
пчела
Metatrader посылает сигнал автообновления каждому индикатору в окне при появлении нового тика, так что это не проблема обновления. Обычно такая проблема возникает, когда индикатор не находит правильно счетчик измененных баров (обычно в индикаторах он называется "limit")... так что это проблема индикатора. Когда вы меняете таймфрейм, он пересчитывает все бары заново, и поэтому он показывает это правильно в этом случае и не делает этого правильно, когда изменено значение только 1 бара.
В заключение: проверьте код индикатора - в нем есть ошибка.
Я разместил этот вопрос в этой теме 'Помощь по кодированию' пару недель назад, но не получил ответа.
Большинство индикаторов MTF перерисовываются, некоторые больше, чем другие. У меня есть один, который перерисовывает немного, но имеет один фактор, который очень хорош и может быть включен в метод. Проблема в том, что мне нужно постоянно вручную обновлять/перекрашивать его, чтобы он имел смысл. Есть ли способ закодировать автоматическое обновление каждый тик или каждые 'x' секунд/тактов?
В настоящее время, чтобы обновить график, я либо меняю время графика, а затем возвращаюсь назад, либо перехожу на вкладку Charts/Refresh, либо добавляю другой индикатор на график и удаляю предыдущий one....... снова и снова! Очень трудоемко!
Если есть способ сделать это автоматическое обновление, я поделюсь тем, что я нашел.............
Спасибо,
пчелапомощь с индикатором
Я мог бы использовать индикатор, который ставит вертикальную линию на последнюю свечу, регулируемую, если у кого-то есть такой индикатор и он может поделиться или если его можно сделать, буду очень признателен.
Есть ли неправильный код?
Я пытаюсь написать советник, который основывается на открытии и закрытии бара.
но у меня проблема с условием для открытия сделки.
Мой метод выглядит примерно так:
+ SELL, когда открытие текущего бара выше, чем закрытие предыдущего бара. TP - закрытие предыдущего бара
+ ПОКУПАТЬ, когда открытие текущего бара ниже, чем открытие предыдущего бара. TP - открытие предыдущего бара
+ ЗАКРЫТЬ, когда текущий бар закрывается.
и вот код (я все еще пытаюсь изучить mql4, поэтому я знаю, что это не лучший код)
#property link "sando"
#define MAGICMA 20050610
//====================parameter===================//
extern double solantang =3;
extern double solangiam =3;
extern double LotsSize =1;
//==============================================//
//+------------------------------------------------------------------+
//| проверка наличия открытой торговли |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Moneymanagement (Type 3)|
//+------------------------------------------------------------------+
double moneymanagement3()
{
double LotsSize = 0.1;
if(OrdersHistoryTotal()>0)
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
if(OrderProfit() > 0)
{
if(OrderLots() > LotsSize)
{
LotsSize = OrderLots()/solangiam;
}
else
{
LotsSize = LotsSize;
}
}
else
{
LotsSize = OrderLots() * solantang;
}
}
return (NormalizeDouble(LotsSize,2));
}
//+------------------------------------------------------------------+
//| CONDITION to open a trade |
//+------------------------------------------------------------------+
void opentrade()
{
int res;
if(Close[0]<Open[1])
{
res=OrderSend(Symbol(),OP_SELL,moneymanagement3(),Bid,3,Close[0],Close[1],"",MAGICMA,0,Red);
return;
}
if(Open[0]>Open[1])
{
res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,Open[0],Close[1],"",MAGICMA,0,Blue);
return;
}
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
void start()
{
//---- проверка на историю и торговлю
if(Bars<100 || IsTradeAllowed()==false) return;
//---- вычисление открытых ордеров по текущему символу
if(CalculateCurrentOrders(Symbol())==0) opentrade();
// else donggiaodich();
//----
}
//+------------------------------------------------------------------+
и, пожалуйста, проверьте картинку во вложении
Я думаю, что что-то не так в коде
Иногда советник не совершает сделку при выполнении условия T_T Я не знаю, почему
и иногда советник совершает сделку, когда условие не выполняется!
Пожалуйста, помогите мне исправить ошибку в коде.
Я пытаюсь написать советник, который основывается на открытии и закрытии бара.
но у меня проблема с условием для открытия сделки.
Мой метод примерно такой :
+ SELL, когда открытие текущего бара выше, чем закрытие предыдущего бара. ТП - закрытие предыдущего бара
+ ПОКУПАТЬ, когда открытие текущего бара ниже, чем открытие предыдущего бара. TP - открытие предыдущего бара
+ ЗАКРЫТЬ, когда текущий бар закрывается.
и вот код (я все еще пытаюсь изучить mql4, поэтому я знаю, что это не самый лучший код)
и, пожалуйста, посмотрите картинку во вложении
Я думаю, что что-то не так в коде
иногда советник не совершает сделку при выполнении условия T_T я не знаю почему
и иногда советник совершает сделку, когда условие не выполняется!
Пожалуйста, помогите мне исправить ошибку в коде.[lang=pl]+ SELL, когда открытие текущего бара выше, чем закрытие предыдущего бара. TP - закрытие предыдущего бара
+ ПОКУПАТЬ, когда открытие текущего бара ниже открытия предыдущего бара. TP - открытие предыдущего бара
Вот первая ошибка:
if(Close[0]Close[1])
if(Open[0]>Open[1]) (Должно быть Open[0]<Open[1])
Вторая - это StopLoss. В вашем коде вы устанавливаете StopLose, но в описании выше
вы сказали, что хотите закрыть сделку, если появится новый бар.
Вот еще одна проблема. Предположим, что Open[0]<Open[1]. Разница может быть настолько мала.
что когда ваш ордер будет исполнен, цена будет выше Open[1] и TP будет
меньше, чем цена открытия ордера. Ниже я добавил условие, которое позволяет поймать этот случай.
Если я правильно понял, что вы хотите закрыть все ордера в конце бара, то вот код.
#property link "sando"
#define MAGICMA 20050610
//====================parameter===================//
extern double solantang =3;
extern double solangiam =3;
extern double LotsSize =1;
//==============================================//
//+------------------------------------------------------------------+
//| проверка наличия открытой торговли |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Moneymanagement (Type 3)|
//+------------------------------------------------------------------+
double moneymanagement3()
{
double LotsSize = 0.1;
if(OrdersHistoryTotal()>0)
{
OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
if(OrderProfit() > 0)
{
if(OrderLots() > LotsSize)
{
LotsSize = OrderLots()/solangiam;
}
else
{
LotsSize = LotsSize;
}
}
else
{
LotsSize = OrderLots() * solantang;
}
}
return (NormalizeDouble(LotsSize,2));
}
//+------------------------------------------------------------------+
//| CONDITION to open a trade |
//+------------------------------------------------------------------+
void opentrade()
{
int res;
if(Close[1] Close[1] )
{
res=OrderSend(Symbol(),OP_SELL,moneymanagement3(), Bid,3,0,Close[1],"",MAGICMA,0,Red);
return;
}
if(Open[0]<Open[1] && Ask < Open[1])
{
res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,0,Open[1],"",MAGICMA,0,Blue);
return;
}
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
void start()
{
if(isNewBar())
{
closeOrders(MAGICMA,OP_BUY);
closeOrders(MAGICMA,OP_SELL);
}
Print(Close[1]-Open[0]);
//---- проверка истории и торговли
if(Bars<100 || IsTradeAllowed()==false) return;
//---- вычисляем открытые ордера по текущему символу
if(CalculateCurrentOrders(Symbol())==0) opentrade();
// else donggiaodich();
//----
}
void closeOrders(int oMagic,int oType) {
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderMagicNumber()==oMagic || oMagic<0) {
if(OrderSymbol()==Symbol()) {
if(OrderType()==oType || oType<0) {
if(OrderType()==OP_BUY) {
OrderClose(OrderTicket(),OrderLots(),Bid,0);
i--;
}
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
i--;
}
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(),OrderLots(),Ask,0);
i--;
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
i--;
}
}
}
}
}
}
}
bool isNewBar() {
static int prevTime;
bool newBar=false;
if(Time[0]!=prevTime) {
newBar=true;
prevTime=Time[0];
}
return(newBar);
}
//+------------------------------------------------------------------+
Ваше здоровье,
Grzesiek[/lang]
Помощь в кодировании: Размещение стоп-лосса и тейк-профита с помощью советника, использующего ECN-брокера
Стоп-лосс, тейк-профит с ECN-брокером
Друзья,
Я новичок в программировании на MQL4 и мне нужна помощь в прикреплении SL и TP к ORDERSEND с ECN брокером.
Изначально я не мог понять, почему SL и TP приводят к ошибке, пока кто-то не указал, что в ORDERSEND нужно установить поле StopLoss и TakeProfit в "0", иначе ECN/STP брокер не исполнит ордер.
Итак, мой вопрос: Как я могу исполнить ордер на рынке, а затем немедленно (или в течение секунды или двух) прикрепить SL/TP к этому тикету?
Вот часть кода, относящаяся к моему вопросу:
if(CurrentPriceBuy>UpperPriceTrigger)
{
OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,0,Co mm,0,0,CLR_NONE);
}
Может ли кто-нибудь помочь мне вставить код сразу после команды OrderSend, чтобы я мог прикрепить TP/SL, скажем, произвольно 25 пунктов к этому конкретному тикету?
Любая помощь будет очень признательна. Заранее спасибо.
С уважением,
Касио
Стоп-лосс, тейк-профит с ECN брокером
Друзья,
Я новичок в программировании на MQL4 и мне нужна помощь в прикреплении SL и TP к ORDERSEND у ECN брокера.
Изначально я не мог понять, почему SL и TP приводят к ошибке, пока кто-то не указал, что в ORDERSEND необходимо установить поле StopLoss и TakeProfit в "0", иначе ECN/STP брокер не исполнит ордер.
Итак, мой вопрос: Как я могу исполнить ордер на рынке, а затем немедленно (или в течение секунды или двух) прикрепить SL/TP к этому тикету?
Вот часть кода, относящаяся к моему вопросу:
if(CurrentPriceBuy>UpperPriceTrigger)
{
OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,0,Co mm,0,0,CLR_NONE);
}
Может ли кто-нибудь помочь мне вставить код сразу после команды OrderSend, чтобы я мог прикрепить TP/SL, скажем, произвольно 25 пунктов к этому конкретному тикету?
Любая помощь будет очень признательна. Заранее спасибо.
С уважением,
КасиоПривет, Касио,
Если вы торгуете у ECN брокера, то вам следует отправлять ордер без SL/TP и модифицировать его.
Вот пример:
extern double StopLoss = 25;
extern double TakeProfit = 25;
if(isECN==true )
{
ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic);
OrderSelect(ticket,SELECT_BY_TICKET);
OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - StopLoss*Point, StopLoss),sltpValue(Ask+ TakeProfit*Point, TakeProfit),0);
}
double sltpValue(double w1, int w2)
{
if(w2 == 0)
return (0);
return (NormalizeDouble(w1, Digits));
}
Надеюсь, что все понятно.
Пишите мне, если у вас есть еще вопросы.
будьте здоровы,
grzesiek
Информация не обновляется каждый тик
Привет, ребята,
Я написал ea, которая показывает мне информацию о различных индикаторах на моем экране.
Однако когда я прикрепляю ea к своему графику, информация обновляется только каждые 5 минут (на 5-минутном графике),
вместо каждого тика. Может быть, что-то не так в моей кодировке? Я бы хотел, чтобы информация менялась каждый тик.
//+------------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2011, Test Inc. |
//| test.net - Ресурсы и информация по тестированию. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Test Inc."
#property link "http://www.test.net"
//+------------------------------------------------------------------+
//| labels |
//+------------------------------------------------------------------+
#define ccilabel "CCIValue"
#define rsilabel "RSIValue"
#define stochlabel "StochValue"
#define upperbandlabel "UpperBandValue"
#define lowerbandlabel "LowerBandValue"
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
int start()
{
//----
//===================================================================
// Dynamic Relative Strength Index berekenen
//===================================================================
двойной RSI;
double UpperBand;
double LowerBand;
RSI=iCustom(NULL,0, "Dynamic Zone RSI",14,0,1);
UpperBand=iCustom(NULL,0, "Dynamic Zone RSI",14,1,1);
LowerBand=iCustom(NULL,0, "Dynamic Zone RSI",14,2,1);
//===================================================================
// CCI berekenen
//===================================================================
двойной CCI;
CCI=iCCI(NULL,0,14,PRICE_TYPICAL,1);
//===================================================================
// Stochastic berekenen
//===================================================================
double Stoch;
Stoch=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
//===================================================================
// Отображение информации
//===================================================================
// CCIValue
ObjectDelete(ccilabel);
ObjectCreate(ccilabel, OBJ_LABEL, 0, 0, 0, 0);
ObjectSet(ccilabel, OBJPROP_XDISTANCE, 20);
ObjectSet(ccilabel, OBJPROP_YDISTANCE, 20);
ObjectSetText(ccilabel, "CCIValue is " + DoubleToStr(CCI,2), 10, "Arial", DeepSkyBlue);
// StochValue
ObjectDelete(stochlabel);
ObjectCreate(stochlabel, OBJ_LABEL, 0, 0, 0, 0);
ObjectSet(stochlabel, OBJPROP_XDISTANCE, 20);
ObjectSet(stochlabel, OBJPROP_YDISTANCE, 40);
ObjectSetText(stochlabel, "StochValue is " + DoubleToStr(Stoch,2), 10, "Arial", DeepSkyBlue);
// RSIValue
ObjectDelete(rsilabel);
ObjectCreate(rsilabel, OBJ_LABEL, 0, 0, 0, 0);
ObjectSet(rsilabel, OBJPROP_XDISTANCE, 20);
ObjectSet(rsilabel, OBJPROP_YDISTANCE, 60);
ObjectSetText(rsilabel, "RSIValue is " + DoubleToStr(RSI,2), 10, "Arial", DeepSkyBlue);
// UpperBandValue
ObjectDelete(upperbandlabel);
ObjectCreate(upperbandlabel, OBJ_LABEL, 0, 0, 0, 0);
ObjectSet(upperbandlabel, OBJPROP_XDISTANCE, 20);
ObjectSet(upperbandlabel, OBJPROP_YDISTANCE, 80);
ObjectSetText(upperbandlabel, "UpperbandValue is " + DoubleToStr(UpperBand,2), 10, "Arial", DeepSkyBlue);
// LowerBandValue
ObjectDelete(lowerbandlabel);
ObjectCreate(lowerbandlabel, OBJ_LABEL, 0, 0, 0, 0);
ObjectSet(lowerbandlabel, OBJPROP_XDISTANCE, 20);
ObjectSet(lowerbandlabel, OBJPROP_YDISTANCE, 100);
ObjectSetText(lowerbandlabel, "LowerBandValue is " + DoubleToStr(LowerBand,2), 10, "Arial", DeepSkyBlue);
//----
return(0);
}
//+------------------------------------------------------------------+
Мод поддержки и сопротивления KG
Здравствуйте,
Мне нужно, чтобы кто-то модифицировал один из прилагаемых индикаторов поддержки и сопротивления. В первом индикаторе есть оповещение при прорыве. Мне нужно оповещение, как только появляется новый бар поддержки или сопротивления. Этот индикатор является одним из лучших индикаторов поддержки/сопротивления, а также очень мощным, особенно на старших таймфреймах.
Спасибо
kg_support_and_resistance.mq4 или
kg_support_and_resistance_alert_revision_2.ex4