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

 
zoroxzyad:
Если я хочу, чтобы период был 30 в корпусе, какую скользящую среднюю я должен поставить на график, две или одну с каким периодом, я не силен в математике, спасибо большое за ваши усилия.

zoroxzyad

Вы не можете использовать только скользящую среднюю. Вы должны использовать формулу из предыдущего поста

 

Есть ли руководство для нового metatrader 4?

Или они когда-нибудь сделают его?

 
techmac:
Есть ли руководство для нового metatrader 4? Или они когда-нибудь сделают его?

Насколько я знаю, нет. Я полагаю, что они появятся (на определенном этапе разработки).

 

Младен, прилагаю модифицированный вами индикатор для отображения сигналов кроссовера на основном графике.

Этот код взят из новой версии.

arrUp[CB] = EMPTY_VALUE;

arrDn[CB] = EMPTY_VALUE;

state[CB] = state[CB+1];

if (TrendBuffer[CB]>LoBuffer[CB]) state[CB] = 1;

if (TrendBuffer[CB]<LoBuffer[CB]) state[CB] = -1;

if (state[CB]!=state[CB+1])

{

if (state[CB]== 1) arrUp[CB] = Low[CB] -iATR(NULL,0,10,CB)/2.0;

if (state[CB]==-1) arrDn[CB] = High[CB]+iATR(NULL,0,10,CB)/2.0;

}

Есть ли простой способ объяснить, как этот код вставляет сигналы?

Спасибо.

Файлы:
 
michaelB:
Mladen, прилагаю модифицированный вами индикатор для отображения сигналов пересечения на основном графике.

Этот код взят из новой версии.

arrUp[CB] = EMPTY_VALUE;

arrDn[CB] = EMPTY_VALUE;

state[CB] = state[CB+1];

if (TrendBuffer[CB]>LoBuffer[CB]) state[CB] = 1;

if (TrendBuffer[CB]<LoBuffer[CB]) state[CB] = -1;

if (state[CB]!=state[CB+1])

{

if (state[CB]== 1) arrUp[CB] = Low[CB] -iATR(NULL,0,10,CB)/2.0;

if (state[CB]==-1) arrDn[CB] = High[CB]+iATR(NULL,0,10,CB)/2.0;

}

Есть ли простой способ объяснить, как этот код вставляет сигналы?

Спасибо.

Майкл

Он ищет пересечения значений в двух буферах: TrendBuffer и LoBuffer. Он отмечает текущее состояние этих двух буферов: если TrendBuffer > LoBuffer, он устанавливает состояние в 1, а если TrendBuffer < LoBuffer, он устанавливает состояние в -1.

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

 

Тоже хлопотный учитель опять, пожалуйста выложите этот индикатор переделанный в индикаторы MT4, спасибо!

colorbars_hlc.mq5

Файлы:
 
mladen:
Майкл

Он ищет пересечения значений в двух буферах: TrendBuffer и LoBuffer. Он отмечает текущее состояние этих двух буферов: если TrendBuffer > LoBuffer, он устанавливает состояние в 1, а если TrendBuffer < LoBuffer, он устанавливает состояние в -1.

Теперь, когда состояние текущего бара отличается от состояния предыдущего бара, это означает, что есть крест. И тогда он рисует стрелку на графике.

Хорошо, это объясняет TrendBuffer и LoBuffer.

Но как работают arrUp и arrDn?

Почему сигналы появляются на определенных свечах, а не на каждой свече.

Еще раз спасибо.

 
michaelB:
Хорошо, это объясняет TrendBuffer и LoBuffer.

Но как работают arrUp и arrDn?

Почему сигналы появляются на определенных свечах, а не на каждой свече.

Еще раз спасибо.

michael

Представьте себе последовательность вроде этой (1, когда TrendBuffer > LoBuffer, -1, когда TrendBuffer < LoBuffer)

11111111-1-1-1-1-1-1-1-111111111

Стрелки нужно рисовать только тогда, когда 1 становится -1 или когда -1 становится 1 (когда меняется "состояние"). Поэтому есть строка, которая проверяет это (эта строка : if (state[CB] !=state[CB+1]) ). Таким образом, когда состояние меняется, стрелка рисуется, иначе стрелку вообще не нужно рисовать.

 

Привет, Младен,

надеюсь, у вас есть время ближе к концу года.

Приведенный ниже код имеет отношение к последнему заданному мне вопросу. Он отслеживает 0.8 пипса для одного ордера после цели в 2 пипса в плюс.

Но как я могу изменить его, чтобы он проверял все ордера и отслеживал их по отдельности?

Большое спасибо! Вы делаете отличную работу.

int start()

{

//----

if (OrdersTotal() == 0) {

isStopLoss = false;

}

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

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if(OrdersTotal() == 0) {

continue;

}

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(isStopLoss == true) {

if(OrderType() == OP_BUY) {

if(iClose(Symbol(), 0, 0) >= (OrderOpenPrice()+inProfitStopLoss*Point)) { // Zieht bei 2.0 Pips nach! - 200 = 2.0 Pips

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) >= (lastStopLoss+trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss+trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+inProfitStopLoss*Point,0,0,0);

if(OrderStopLoss() >= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

} else if(OrderType() == OP_SELL) {

if(iClose(Symbol(), 0, 0) <= (OrderOpenPrice()-inProfitStopLoss*Point)) {

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) <= (lastStopLoss-trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss-trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-inProfitStopLoss*Point,0,0,0); // 200 ursprünglich

if(OrderStopLoss() <= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

}

lastStopLoss = OrderStopLoss();

continue;

}

if(OrderType() == OP_BUY) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-initialStopLoss*Point,0,0,0);

} else if(OrderType() == OP_SELL) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+initialStopLoss*Point,0,0,0);

}

lastStopLoss = OrderStopLoss();

}

//----

return(0);

}
 
arroganzmaschine:
Привет, Младен,

надеюсь, у вас найдется время ближе к концу года.

Приведенный ниже код имеет отношение к последнему заданному мне вопросу. Он отслеживает 0.8 пипса для одного ордера после цели в 2 пипса в плюс.

Но как я могу изменить его, чтобы он проверял все ордера и отслеживал их по отдельности?

Большое спасибо! Вы делаете отличную работу.

int start()

{

//----

if (OrdersTotal() == 0) {

isStopLoss = false;

}

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

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if(OrdersTotal() == 0) {

continue;

}

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(isStopLoss == true) {

if(OrderType() == OP_BUY) {

if(iClose(Symbol(), 0, 0) >= (OrderOpenPrice()+inProfitStopLoss*Point)) { // Zieht bei 2.0 Pips nach! - 200 = 2.0 Pips

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) >= (lastStopLoss+trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss+trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+inProfitStopLoss*Point,0,0,0);

if(OrderStopLoss() >= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

} else if(OrderType() == OP_SELL) {

if(iClose(Symbol(), 0, 0) <= (OrderOpenPrice()-inProfitStopLoss*Point)) {

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) <= (lastStopLoss-trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss-trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-inProfitStopLoss*Point,0,0,0); // 200 ursprünglich

if(OrderStopLoss() <= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

}

lastStopLoss = OrderStopLoss();

continue;

}

if(OrderType() == OP_BUY) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-initialStopLoss*Point,0,0,0);

} else if(OrderType() == OP_SELL) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+initialStopLoss*Point,0,0,0);

}

lastStopLoss = OrderStopLoss();

}

//----

return(0);

}

arroganzmaschine

Проверьте способ управления трейлинг-стопами в советнике из этого поста: https: //www.mql5.com/en/forum/181334. Я думаю, что это может помочь вам, поскольку он имеет все элементы (включая проверку ошибок), которые необходимы для обработки трейлинг стоп лосс.