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

 

Большое спасибо!!! cockeyedcowboy, это было действительно здорово!!!

Теперь сообщение об ошибке исчезло!!!

Но 2-й индикатор не рисуется и я не знаю почему.

Buffer_Ma=iMAOnArray(Buffer_Mom,0,Periode_MA_Momentum,0,MODE_SMA,i);

 

У вас проблемы со вторым буфером, потому что в нем нет данных для вычислений.

Попробуйте вычислить ВСЕ элементы в Buffer_Mom, затем Buffer_Ma.

Пример:

void start()

{

int counted_bars=IndicatorCounted();

int limit=Bars-counted_bars;

if(counted_bars>0) limit++;

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

{

Buffer_Mom=iMomentum(NULL,Timeframe_Momentum,Periode_Momentum,PRICE_CLOSE,i);

}

for( i=0; i<limit; i++)

{

Buffer_Ma=iMAOnArray(Buffer_Mom,0,Periode_MA_Momentum,0,MODE_SMA,i);

}

return(0);

}

Удачи.

 

Нахождение OHLC определенного бара

Может ли кто-нибудь подсказать мне, как узнать цену закрытия определенного бара с помощью кода MQL? Можно ли ссылаться на бар по его времени?

Т.е.: closing_price_of_bar = Close("04:59:00 AM") ... если бы это было так просто!

Спасибо

 

Привет, народ!

У меня еще одна большая проблема...

как закодировать это условие:

входить в лонг или шорт только в первый раз

(так что если у меня есть много следующих длинных сигналов, ea вводит только в первый раз).

Я буду благодарен всем, кто поможет мне в этом.

вот мой простой код для условия покупки:

//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);

}

}
 
Sadly:
Может ли кто-нибудь подсказать мне, как узнать цену закрытия определенного бара с помощью кода MQL? Могу ли я ссылаться на бар по его времени?

т.е.: closing_price_of_bar = Close("04:59:00 AM") ... если бы это было так просто!

Спасибо

Попробуйте это:

closing_price_of_bar = iClose(Symbol(),PERIOD_M1,iBarShift(Symbol(),PERIOD_M1,StrToTime("04:59")));

 

Купить или продать

Привет всем,

У меня есть советник на покупку и советник на продажу, которые всегда открывают более одной позиции. Я хотел бы получить некоторую помощь в том, как изменить или модифицировать код, который позволяет только 1(одну) позицию покупки и 1(одну) позицию продажи и на 1(одном) счете.

SL и TP будут использовать Price Target, т.е. если цена покупки достигла Price Target, то позиция будет закрыта. То же самое с ценой продажи.

Буду признателен за помощь экспертам по коду на этом форуме.

Спасибо.

=s21=

Файлы:
opensell.mq4  2 kb
 

Покупка и продажа

Упс...

Вот советник по покупке.

Файлы:
openbuy.mq4  2 kb
 

Здравствуйте, если вам нужно, чтобы был открыт только один ордер, вы можете просто добавить следующее условие: If (OrdersTotal()==0).

Таким образом, ваши правила для ордеров BUY будут примерно такими:

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

[/CODE]

So you will not get second-third-... orders opened until you current order open.

dr.house7:
hy folks !

ok i have another big problem...

how to code this condition :

enter long or short only first time

(so if i have many following long signal ea enter only at first time)

i'll pay everyone could help me on this

this is my simple code for buy condition:

[CODE]

//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);

}

}
 
Roger09:
Попробуйте так: closing_price_of_bar = iClose(Symbol(),PERIOD_M1,iBarShift(Symbol(),PERIOD_M1,StrToTime("04:59"));

Отлично! Мне пришлось добавить еще одну закрывающую скобку, чтобы интерпретатор не жаловался на ошибку, но все работает отлично.

Спасибо, Roger09

 
Avalanche2k:
Привет, если вам нужно, чтобы открывался только один ордер, вы можете просто добавить следующее условие: If (OrdersTotal()==0).

Так что ваши правила для заказов на покупку будут примерно такими:

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

Таким образом, вы не получите вторые-третьи-... ордера, открытые до открытия текущего ордера.

Спасибо Лавина,

но это не решение для меня, потому что у меня есть TP, я не жду противоположного условия.

Другие идеи? Напишите мне, я заплачу.

Причина обращения: