Помощь в кодировании - страница 19

 

Я завершил свой советник с вашей помощью Спасибо еще раз

Здравствуйте, mLaden,

Спасибо еще раз за вашу большую помощь

Я завершил свой советник с вашей помощью Спасибо еще раз

ThanXXXXXXXXXXXX

 

Перекрашивание индикаторов

Я разместил этот вопрос в этой теме 'Помощь по кодированию' пару недель назад, но не получил ответа.

Большинство индикаторов MTF перерисовываются, некоторые больше, чем другие. У меня есть один, который перерисовывается незначительно, но имеет один фактор, который очень хорош и может быть включен в метод. Проблема в том, что мне нужно постоянно вручную обновлять/перерисовывать его, чтобы он имел смысл. Есть ли способ закодировать автоматическое обновление каждый тик или каждые 'x' секунд/тактов?

В настоящее время, чтобы обновить график, я либо меняю время графика, а затем возвращаюсь назад, либо перехожу на вкладку Charts/Refresh, либо добавляю другой индикатор на график и удаляю предыдущий one....... снова и снова! Очень трудоемко!

Если есть способ сделать это автоматическое обновление, я поделюсь тем, что я нашел.............

Спасибо,

el bee

 

...

пчела

Metatrader посылает сигнал автообновления каждому индикатору в окне при появлении нового тика, так что это не проблема обновления. Обычно такая проблема возникает, когда индикатор не находит правильно счетчик измененных баров (обычно в индикаторах он называется "limit")... так что это проблема индикатора. Когда вы меняете таймфрейм, он пересчитывает все бары заново, и поэтому он показывает это правильно в этом случае и не делает этого правильно, когда изменено значение только 1 бара.

В заключение: проверьте код индикатора - в нем есть ошибка.

el bee:
Я разместил этот вопрос в этой теме 'Помощь по кодированию' пару недель назад, но не получил ответа.

Большинство индикаторов 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 Я не знаю, почему

и иногда советник совершает сделку, когда условие не выполняется!

Пожалуйста, помогите мне исправить ошибку в коде.

Файлы:
1_2.gif  12 kb
new_edge.mq4  4 kb
 
7thman:
Я пытаюсь написать советник, который основывается на открытии и закрытии бара.

но у меня проблема с условием для открытия сделки.

Мой метод примерно такой :

+ 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 пунктов к этому конкретному тикету?

Любая помощь будет очень признательна. Заранее спасибо.

С уважением,

Касио

 
kasio:
Стоп-лосс, тейк-профит с 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