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

 
pawang:
Привет

Извините, если мой вопрос очень простой.

Я изучаю mql4.

Пожалуйста, помогите мне, как выразить это математическое условие в mql4:

IF( (A>B) AND (|X| <1) AND (Y<Z) ) then... ... ... ... ....

|X| является абсолютным; это означает (X 1).

Я получил сообщение от MetaEditor

" IF ВЫРАЖЕНИЕ СЛИШКОМ СЛОЖНОЕ".

После многократных попыток... У меня больше нет идей... Поэтому, пожалуйста, скажите мне, как...

Спасибо

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

if((a>b && MathAbs(x)<1) && y<z)

{

//напишите здесь, что должно произойти

}

 

Вопрос к оракулу...

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

Я хотел бы запустить 30-дневную оптимизацию профит-фактора для 16 параметров. и чтобы он просто применял настройки перед тем, как снова начать торговать. Советник автоматически отключается каждый день примерно на 8 часов. это было бы идеальное время для его запуска...

Кто-нибудь знает, как это закодировать... Это подняло бы его с уровня великого советника до уровня безумно прибыльного ИИ...

Это также может быть хорошим кодом для всех, чтобы использовать в своих советниках рынки постоянно корректируются, почему наши советники не должны становиться умнее.

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

Спасибо за помощь.

 

совет пожалуйста

Возможно ли создать индикаторы баров в отдельных окнах, как индикатор на картинке, которую я разместил [не знаю, как они официально называются], скажем, для красного бара, если MACD пересекает отрицательную зону и остается красным, если в отрицательной зоне, и зеленым, если пересекает положительную и т.д. и т.п. Также возможно ли создать такие же окна индикатора бара, скажем, если цена опускается ниже скользящей средней.

Если вопрос покажется глупым, пожалуйста, потерпите. Когда я смотрю на индикаторы на графике, я обычно пытаюсь предугадать, что будет делать цена, поэтому я хочу попробовать создать отдельные окна индикаторов, которые, когда все они показывают один и тот же цвет, я буду торговать. [Психологические причины]. Могу ли я научиться создавать эти отдельные индикаторы типа баров, я далеко не программист на любом языке.

Буду очень признателен за любой совет.

dh

Файлы:
chart.jpg  11 kb
 
pawang:
Привет

Извините, если мой вопрос очень простой.

Я изучаю mql4.

Пожалуйста, помогите мне, как выразить это математическое условие в mql4:

IF( (A>B) AND (|X| <1) AND (Y<Z) ) then... ... ... ... ....

|X| является абсолютным; это означает (X 1).

Я получил сообщение от MetaEditor

" IF ВЫРАЖЕНИЕ СЛИШКОМ СЛОЖНОЕ".

После многократных попыток... У меня больше нет идей... Поэтому, пожалуйста, скажите мне, как...

Спасибо

if(a>b && (x 1) && y<z){

;ваш код

}

или может быть x == 0 вместо (x 1), потому что MathAbs(x) < 1 верно только при x=0.

http://docs.mql4.com/basis/operations/bool

С другой стороны, возможно, вам просто нужно это:

if(a>b && x<1 && y<z)

или так

if(a>b && x<-1 && y<z)

поскольку x никогда не будет 0 или -1 согласно вашему определению.

Меня смущает ваше определение абсолютного значения

 
dxx:
Возможно ли создание индикаторов баров в отдельных окнах, как индикатор на картинке, которую я разместил [не знаю, как они официально называются], скажем, красный бар, если MACD пересекает отрицательную зону и остается красным, если в отрицательной зоне, и зеленым, если в положительной и т.д. и т.п. Также возможно ли создать такие же окна для индикаторов, скажем, если цена опускается ниже скользящей средней.

если вопрос покажется глупым, пожалуйста, потерпите меня. Когда я смотрю на индикаторы на графике, я обычно пытаюсь предугадать, что будет делать цена, поэтому я хочу попробовать иметь отдельные индикаторы окна, которые, когда все показывают один и тот же цвет, я буду торговать. [Психологические причины]. Могу ли я научиться создавать эти отдельные индикаторы типа баров, я далеко не программист на любом языке.

Любой совет был бы очень признателен.

dh

Да, это возможно.

 
dxx:
Можно ли создать барные индикаторы в отдельных окнах, как индикатор на картинке, которую я разместил [не знаю, как они официально называются], скажем, для красного бара, если MACD пересекает отрицательную зону и остается красным, если в отрицательной зоне, и зеленым, если пересекает положительную и т.д. и т.п. Также возможно ли создать такие же окна для индикаторов, скажем, если цена опускается ниже скользящей средней.

если вопрос покажется глупым, пожалуйста, потерпите меня. Когда я смотрю на индикаторы на графике, я обычно пытаюсь предугадать, что будет делать цена, поэтому я хочу попробовать иметь отдельные индикаторы окна, которые, когда все показывают один и тот же цвет, я буду торговать. [Психологические причины]. Могу ли я научиться создавать эти отдельные индикаторы типа баров, я далеко не программист на любом языке.

Любой совет был бы очень признателен.

dh

Вот именно то, что вы хотите, загрузите все 4 одинаковых индикатора на один график с разными настройками, как показано ниже, когда все красные продают, когда все синие покупают.

настройки

первая на 15 минут

второй 30 минут

третий 60 минут

четвертый 140 минут

Файлы:
 

спасибо

Ребята, спасибо, я изучу размещенные индикаторы.

очень признателен

 

Можно ли написать какой-то индикатор, который строит постоянные тиковые графики или постоянные диапазонные бары в другом окне? Это разные формы построения графиков, не основанные на времени. Например, 100-тиковый бар формируется всякий раз, когда цена движется на 100 тиков. Таким образом, при небольшом объеме бар не формируется. Бар постоянного диапазона формируется всякий раз, когда цена перемещается на заданное количество тиков в диапазоне. Например, бар диапазона, установленный на 20, формируется всякий раз, когда цена заполняет диапазон в 20 пунктов. Затем начинается следующий бар. Поскольку они не основаны на времени, я не уверен, что это возможно в данной платформе.

 

добавить простой алерт к советнику

Здравствуйте, надеюсь найти здесь помощь, в которой я нуждаюсь! Не могли бы вы показать мне, как добавить оповещение для этого советника, например? Просто когда условия выполняются для покупки, он также оповещает меня.

Спасибо,

Лео

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False;

extern double Lots = 1.0;

extern int Slippage = 3;

extern bool StopLossMode = True;

extern int StopLoss = 30;

extern bool TakeProfitMode = True;

extern int TakeProfit = 60;

extern bool TrailingStopMode = True;

extern int TrailingStop = 30;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

int BarCount;

int Current;

bool TickCheck = False;

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

//| функция инициализации эксперта |

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

int init() {

BarCount = Bars;

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

return(0);

}

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

//| функция деинициализации эксперта ||.

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

int deinit() {

return(0);

}

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

//| функция запуска эксперта |

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

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

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

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Начало переменной |

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

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

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

double Buy2_1 = iMA(NULL, 0, 445, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

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

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

//| Конец переменной |

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

//Проверка позиции

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

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

//| Сигнал Begin(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;

}

//Трейлинг-стоп

if(TrailingStopMode && 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

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

//| Сигнал Начало(Выход Продажа) |

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

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

//| Сигнал 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;

}

//Трейлинг-стоп

if(TrailingStopMode && 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;

}

}

}

}

}

}

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

//| Сигнал Begin(Entry)|

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

if (Buy1_1 < Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

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

//| Сигнал Окончание |

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

//Покупка

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

if(!IsTrade) {

//Проверка свободной маржи

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

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

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

if (TakeProfitMode) 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 : ", OrderOpenPrice());

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

} else {

Print("Ошибка открытия ордера BUY : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Продажа

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

if(!IsTrade) {

//Проверка свободной маржи

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

Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());

return(0);

}

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

if (TakeProfitMode) 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: ", OrderOpenPrice());

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

} else {

Print("Ошибка открытия ордера SELL : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

 

Спасибо и другие задания

Спасибо, что ответили на мой вопрос.

newdigital, Kalenzo, asmdev

И спасибо всем.

Это мой следующий вопрос.

1.) Как сравнить значение чего-то происходящего и произошедшего.

например, если "n" сейчас, переменная времени, то n-a = "a" время до этого момента.

Как сравнить значение RSI, когда это произошло в (n-a) и RSIn(сейчас).

или как сравнить MA50 для трех баров до настоящего момента и последнего бара?

2.) Согласно пункту 1.) реальный случай... как создать бычью/медвежью дивергенцию?

Когда условия: Есть самая высокая цена и самый высокий RSI на определенном таймфрейме. А затем, по истечении времени... мы встречаем новую самую высокую цену, но за ней не следует новый максимум RSI (RSI не смог сформировать новый максимум).

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

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