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

 
delvinja:
Привет, ребята, последние три дня я безуспешно пытаюсь заставить этот советник совершать длинные сделки в mt4. он совершает только короткие сделки, хотя сигнал_покупки есть. пожалуйста, не мог бы кто-нибудь взглянуть на этот код и исправить его для меня или сказать мне, что делать. я новичок в программировании и создал его из онлайн конструктора стратегий. спасибо заранее! код прилагается.
double ... = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);[/PHP]

I am not sure about the -3 shift parameter : it shift the curve to the left, so the current bar is undefinited. Try to replace all -3 by 0 to see if the buy orders are triggered.

I would replace

double Var1 = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);

double Var2 = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);

double Var3 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current + 0);

double Var4 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_LOWER, Current + 0);

double Buy1_1 = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current + 0);

double Sell1_1 = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_LOWER, Current + 0);

double CloseBuy1_1 = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseBuy1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current + 0);

double CloseSell1_1 = iMA(NULL, 0, 3, -3, MODE_SMA, PRICE_CLOSE, Current + 0);

double CloseSell1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current + 0);

by

[PHP]double Buy1_1 = iMA(NULL, 0, 3, 0, MODE_SMA, PRICE_CLOSE, Current);

double Buy1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current);

double Sell1_1 = Buy1_1;

double Sell1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_LOWER, Current);

double CloseBuy1_1 = Buy1_1;

double CloseBuy1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current);

double CloseSell1_1 = Buy1_1;

double CloseSell1_2 = iBands(NULL, 0, 20, 2, 1, PRICE_CLOSE, MODE_UPPER, Current);

Rem :

- Var1,2,3,4 не используются.

- Оба CloseBuy1_2 и CloseSell1_2 одинаковы: вероятно, один из них неправильный (MODE_LOWER).

 

Нужна помощь с кодом

Мишель, большое спасибо за помощь, все отлично исправлено! Вы лучшие ребята, я наконец-то могу немного отдохнуть. Я дам вам знать, как прошло мое тестирование.

Кстати, вы хотите сказать, что -3 никогда не сможет работать в этом советнике? Еще раз спасибо.

 
delvinja:
... кстати, вы хотите сказать, что -3 никогда не сможет работать в этом советнике? Еще раз спасибо.

Честно говоря, я так и не понял, как используется этот сдвиг: если вы хотите узнать значение индикатора за 3 бара до текущего бара, просто используйте 3 как сдвиг, но последний; первый просто сдвигает рисунок кривой, а если вы используете отрицательное значение, это похоже на то, что прошлое знает будущее...

В любом случае, я буду рад, если кто-нибудь объяснит мне его использование!

Но чтобы ответить на ваш вопрос, попробуйте узнать точную стратегию, которой вы хотите следовать, откуда берется это -3?

 

здравствуйте

в этом эксперте я хотел бы изменить все sl на sl последних ордеров, как и tp, но не смог.

пожалуйста, помогите мне

Файлы:
javadea.mq4  9 kb
 

Что я сделал?

Мне нужна помощь в кодировании в MT4

У меня есть некоторый код ниже:

StopLoss=EMAtrend-iClose(NULL,0,1);

TakeProfit=StopLoss

If(EMAshort>EMAlong && EMAshort_prev<EMAlong_prev)

{

OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask+StopLoss*Point,Bid+TakeProfit*Point, "Купить по цене закрытия",10000,0,Green);

}

If(EMAshortEMAlong_prev)

{

OrderSend(Symbol(),OP_SELL,Lots,Bid,0,StopLoss,Bid+TakeProfit*Point, "Продать по цене закрытия",11000,0,Red);

}

Идея заключалась в следующем:

1. Открывать ордер по цене закрытия при выполнении критериев;

2. Я хочу, чтобы EMAtrend был уровнем стоплосса;

3. Расстояние между EMAtrend и баром цены закрытия будет расстоянием для тейкпрофита от цены открытия.

Я пробую код выше, но ничего не происходит и появляется ошибка 130.

Пожалуйста, помогите мне.

 

Нужна помощь с кодом

Привет всем

Я пытаюсь скомпилировать ea, но он выдает следующую ошибку:

'TradeSymbol' - expression on global scope not allowed I:\Program Files\MetaTrader - Alpari\experts\TTL.mq4 (65, 34)[/CODE]

Now the part of the ea causing this is right at the start of the code :

string TradeSymbol; TradeSymbol=Symbol();

If I block this out it comes up with errors for the following bit of code :

[CODE] if(TotalTradesThisSymbol(TradeSymbol)==0) { int BS=0,SS=0,BL=0,SL=0; }

if(TotalTradesThisSymbol(TradeSymbol)>0) {

for(cnt=0;cnt<total;cnt++) {

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()== Symbol) {

if(OrderMagicNumber()==11) { BS=OrderTicket(); }

if(OrderMagicNumber()==22) { SS=OrderTicket(); }

if(OrderMagicNumber()==33) { BL=OrderTicket(); }

if(OrderMagicNumber()==44) { SL=OrderTicket(); }

}//end if(OrderSymbol

}//end for

}//end if */

Я хотел бы знать, есть ли простой способ исправить это.

Я не силен в кодировании, только копирую и вставляю.

Заранее спасибо

Basza

 
basza:
Привет всем

Я пытаюсь скомпилировать ea, но она выдает следующую ошибку:

'TradeSymbol' - expression on global scope not allowed I:\Program Files\MetaTrader - Alpari\experts\TTL.mq4 (65, 34)[/CODE]

Now the part of the ea causing this is right at the start of the code :

string TradeSymbol; TradeSymbol=Symbol();

If I block this out it comes up with errors for the following bit of code :

[CODE] if(TotalTradesThisSymbol(TradeSymbol)==0) { int BS=0,SS=0,BL=0,SL=0; }

if(TotalTradesThisSymbol(TradeSymbol)>0) {

for(cnt=0;cnt<total;cnt++) {

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()== Symbol) {

if(OrderMagicNumber()==11) { BS=OrderTicket(); }

if(OrderMagicNumber()==22) { SS=OrderTicket(); }

if(OrderMagicNumber()==33) { BL=OrderTicket(); }

if(OrderMagicNumber()==44) { SL=OrderTicket(); }

}//end if(OrderSymbol

}//end for

}//end if */

Я хотел бы знать, есть ли простой способ исправить это.

Я не силен в кодировании, только в копировании и вставке.

Заранее спасибо

Basza

Вы можете определить TradeSymbol как строку на глобальном совке, но там вы не сможете оценить функцию Symbol(). Поэтому замените все "TradeSymbol" на "Symbol()", или присвойте значение в функции init() или start() вот так:

void Init(){TradeSymbol=Symbol();}
 

помощь в программировании

Привет, я пытался программировать ea, и я следовал вашему курсу (очень интересно!).

Я достаточно хорошо знаю, как программировать на java и немного на c++.

Я пытался запрограммировать ea с индикаторами brain trend, идея заключается в следующем

когда индикаторы brainTrend2stop и braintrend1stop DOT присутствуют покупаем (и наоборот).

но если я вызываю функцию icustom следующим образом

BuyValueCurrent = iCustom(NULL,TimeFrame,IndicatorName1,NumBars,0,1) ;

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

Есть ли способ сделать его булевым? Я бы хотел написать функцию типа

buy=true

BuyCondition = (IndicatorName1=true && IndicatorName2=true);

кто-нибудь может помочь, пожалуйста, пожалуйста, пожалуйста???

 

Контроль за исполнением ордера на вход...

У меня есть советник, который открывает и управляет позицией, но иногда индикатор дает один и тот же сигнал несколько раз и советник открывает каждый раз, когда этот сигнал выходит новая позиция - но я не хочу вторую или третью и так далее и далее позицию, я хочу только первую - возможно ли, чтобы советник проверял открытую позицию на основе магического числа и пары, чтобы избежать таких множественных входов?

 
payback:
Привет, я пытался запрограммировать ea, и я следовал вашему курсу (очень интересно!).

Я достаточно хорошо знаю, как программировать на java и немного c++

Я пытался запрограммировать ea с индикаторами brain trend, идея заключается в следующем

когда индикаторы brainTrend2stop и braintrend1stop DOT присутствуют покупаем (и наоборот).

но если я вызываю функцию icustom следующим образом

BuyValueCurrent = iCustom(NULL,TimeFrame,IndicatorName1,NumBars,0,1) ;

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

Есть ли способ сделать его булевым? Я бы хотел написать функцию типа

buy=true

BuyCondition = (IndicatorName1=true && IndicatorName2=true);

Кто-нибудь может помочь, пожалуйста, пожалуйста, пожалуйста???
BuyCondition = BuyValueCurrent1 != EMPTY_VALUE && BuyValueCurrent2 != EMPTY_VALUE;
Причина обращения: