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

 

Здравствуйте, я новичок в программировании на MQL4 и у меня есть вопрос. В настоящее время я пишу советника. Я хотел бы менять цвет свечи, когда она соответствует заданным критериям. Также было бы неплохо, если бы он мог отмечать надпись "Errow" или "Check" над или под свечой. Интересно, возможно ли это? Может ли кто-нибудь помочь мне? Спасибо.

 
Файлы:
 

Помогите с советником для построения скользящей средней на экране

Здравствуйте, я пытаюсь научиться программировать MT4 и не могу понять, как построить скользящую среднюю на экране. Я могу получить все другие линии и прочее, что мне нужно, но скользящую среднюю нет.

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

Заранее спасибо за помощь.

 

Скользящая средняя является стандартным индикатором в Metatrader.

Итак, найдите этот индикатор здесь

и прикрепите его к графику.

Читайте также эту тему https://www.mql5.com/en/forum/178706

Файлы:
 
newdigital:
Скользящая средняя является стандартным индикатором в Metatrader.

Итак, найдите этот индикатор здесь

Почитайте также эту тему https://www.mql5.com/en/forum/178706.

Неа, вы неправильно поняли мой вопрос. Я знаю, как прикрепить индикатор, с этим проблем нет. Мне нужен код для вызова индикатора из советника, чтобы при загрузке советника он автоматически рисовал индикатор на экране.

Надеюсь, на этот раз я понятно объяснил?

 
jwhite1319:
Нет, вы неправильно поняли мой вопрос. Я знаю, как прикрепить индикатор, проблем нет. Мне нужен код для вызова индикатора из советника, чтобы при загрузке ea он автоматически рисовал индикатор на экране. Надеюсь, я понятно объяснил?

Пример кода, который строит 2 MA на графике:

ExtCountedBars=IndicatorCounted();

if (ExtCountedBars<0) return(-1);

if (ExtCountedBars>0) ExtCountedBars--;

int pos=Bars-ExtCountedBars-1;

while(pos>=0)

{

ExtMapBuffer1[pos] = iMA(Symbol(),0,MAslow_period,MAslow_shift,MAslow_type,MAslow_price,pos);

ExtMapBuffer2[pos] = iMA(Symbol(),0,MAfast_period,MAfast_shift,MAfast_type,MAfast_price,pos);

pos--;

}

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

FerruFx

 

Я хотел бы узнать, может ли кто-нибудь помочь мне сделать так, чтобы этот советник увеличивал лоты по мере роста счета? Чтобы он использовал процент вместо фиксированных лотов. Или просто удваивался каждый раз, когда счет удваивается. Заранее спасибо

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 1.0;

extern int Slippage = 3;

extern bool UseStopLoss = True;

extern int StopLoss = 200;

extern bool UseTakeProfit = False;

extern int TakeProfit = 60;

extern bool UseTrailingStop = True;

extern int TrailingStop = 200;

int BarCount;

int Current;

bool TickCheck = False;

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

//| expert initialization function |

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| expert deinitialization function |

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

int deinit() {

return(0);

}

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

//| expert start function |

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

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Variable Begin |

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

double Buy1_1 = iClose(NULL, 0, Current + 0);

double Buy1_2 = iOpen(NULL, 0, Current + 3);

double Sell1_1 = iClose(NULL, 0, Current + 0);

double Sell1_2 = iOpen(NULL, 0, Current + 0);

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

//| Variable End |

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

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;

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

//| Signal End |

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

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

помощь с кодом

Пример кода, который строит 2 MA на графике:

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

Идеально. Именно то, что мне было нужно. Спасибо, FerruFx!

 

исчезновение панелей инструментов.

Кто-нибудь знает, почему мои панели инструментов исчезают каждый раз, когда я выключаю MT4? Мне приходится проходить и перезагружать панели инструментов, когда я снова включаю MT.....

 

проблема компиляции

Возможно, вы сможете мне помочь.

Иногда, когда я компилирую новый индикатор, MT4 решает скомпилировать большинство моих индикаторов, но не все. Некоторые из моих индикаторов НЕ появляются в окне Навигатора, когда это происходит, поэтому я не могу перетащить их на график. Есть ли у вас идеи, почему это может произойти?

Мне приходится перемещать некоторые индикаторы в другую папку, чтобы все мои индикаторы, начинающиеся с "_TRO_", скомпилировались и появились в окне Navigator. Может ли "_" перед названием быть причиной проблемы?