[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 106

 
vovan-gogan:
Люди, help: у меня условие в советнике должно быть, чтобы позиция Buy открывалась только в случае, если минимум предыдущей свечи ниже всех минимумов предыдущих 40 свечей. Вопрос: как реализовать этот перебор минимумов предыдущих свечей и выяснить имелся ли минимум ниже минимума предыдущей свечи? Заранее благодарен.
int TotalBars = 40; // Общее количество свечей по которым нужно осуществлять перебор
double max=0.0;
double min=100.0;
for(int n=0; n<TotalBars; n++)
  {
  if(High[n]>max) max=High[n];
  if(Low[n]<min) min=Low[n];
  }
MessageBox("Maximum="+max+" Minimum="+min);
 
langolier:

  Ай спасибо Вам!)
 
langolier:

Ммм... Вот проблемка... Данные должны обновляться при каждом новом тике и только на последние 30 баров... А у меня почему-то данные сохраняются
 
sergeev:

Помогите найти ошибку!


10
mamba5 18.08.2011 14:23

Я пишу советник работающий на основе стратегии «Черный MACD» (Black MACD):


Валютная пара: любая

Таймфрейм: от 15 и выше.

Индикаторы: EMA(3) EMA(18), RSI(14), MACD(12,26,9)

Убираем у индикатора MACD сигнальную линию, все индикаторы применяем к показателю цены Close.

Сигнал входа на покупку: EMA(3) пересекает EMA(18) снизу вверх, ждем когда MACD выйдет в положительную сторону. Если RSI(14) выше уровня 50, то входим на покупку. Стоп-лосс устанавливаем на последний локальный минимум. Выходим из сделки по обратному пересечению EMAили используем свой подход.

Сигнал на продажу: Обратная ситуация: Пересечение EMA(3) EMA(18) сверху вниз, ждем, когда MACDстанет отрицательным. Если RSI(14) ниже уровня 50, то входим на продажу. Стоп-лосс устанавливаем на последний максимум.


При компиляции кода говорит что не хватает скобки. После долгих поисков я казалось нашел где она должна быть, но после исправления ошибки мне выдало еще 20-30 новых косяков. Подскажите где недачет. ))) Код в приложенном файле.

Прикрепленные файлы:
BlackvMACD.mq4 (5.21 KB) удалить
Ошибки компиляции устранил. В правильность алгоритма реализации стратегии не вникал.
Файлы:
 
first_may:


Прочитал: https://book.mql4.com/ru/variables/arrays . Получается, что я могу организовать двумерный массив допустим для трех пар: double Mas_d[3][2] = {1, 0, 2, 0, 3,0};

при этом держа в уме, что:

значение Mas_d[1][1] соответствует например паре AUDCAD, а Mas_d[1][2] - это значение этой пары;

значение Mas_d[2][1] соответствует например паре AUDCHF, а Mas_d[2][2] - это значение этой пары ;

значение Mas_d[3][1] соответствует например паре AUDJPY, а Mas_d[3][2] - это значение этой пары,

при этом элементы массива сохраняют свои значения в промежутке между тиками. И далее по нужному мне критерию я смогу изменять значения элементов массива. Я правильно понял то, что вы имели ввиду? :)

Да. Подход может быть и не самый лучший, но каждый выбирает его Себе Сам. А потом если нужно модернизирует, оптимизирует! :))

Я вот как раз сейчас Свой подход модернизирую. Не удобно получается в некоторых случаях! :D

 
MaxZ:

Да. Подход может быть и не самый оптимальный, но каждый выбирает его Себе Сам. А потом если нужно модернизирует, оптимизирует! :))

Я вот как раз сейчас Свой подход модернизирую. Не удобно получается в некоторых случаях! :D

Я новичёк и пытался написать пробного эксперта,но при компиляции выдаёт ошибку"'\end_of_program' - ending bracket '}' expected C:\Program Files\ForexClub MT4\experts\trsi01.mq4 (30, 3) " я понимаю что написал как попало,пожалуста скажите где ошибки?

//+------------------------------------------------------------------+
//| trsi01.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

double StopLoss=30;

double TakeProfit=100;

double Lots=0.1;

return(0);


int start()
{
if(iRSI(NULL,0,8,PRICE_CLOSE,0)<30)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point);
{
if(iRSI(NULL,0,8,PRICE_CLOSE,0)>70)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point);
{
return(0);
{

 
acoman:

Я новичёк и пытался написать пробного эксперта,но при компиляции выдаёт ошибку"'\end_of_program' - ending bracket '}' expected C:\Program Files\ForexClub MT4\experts\trsi01.mq4 (30, 3) " я понимаю что написал как попало,пожалуста скажите где ошибки?

//+------------------------------------------------------------------+
//| trsi01.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

double StopLoss=30;

double TakeProfit=100;

double Lots=0.1;

return(0);


int start()
{
if(iRSI(NULL,0,8,PRICE_CLOSE,0)<30)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point);
{
if(iRSI(NULL,0,8,PRICE_CLOSE,0)>70)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point);
{
return(0);
{


Ошибка в том, что Вы не прочитали учебник от корки до корки. Если вообще Вы его открывали.

Но явно пропустили вот этот раздел: Условный оператор if - else.

А лучше и правда прочитайте учебник от корки до корки.

 
Спасибо, учту :). А подскажите пожалуйста, можо ли определить какой минимальный стоп-лосс имеет конкретная пара валют? Ну вот допустим пара EURAUD - тут меньше 100 пунктов поставить нельзя стоп лосс, а для остальных?
 
first_may:
Спасибо, учту :). А подскажите пожалуйста, можо ли определить какой минимальный стоп-лосс имеет конкретная пара валют? Ну вот допустим пара EURAUD - тут меньше 100 пунктов поставить нельзя стоп лосс, а для остальных?

https://book.mql4.com/ru/appendix/marketinfo

MODE_STOPLEVEL 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах
 

Как сформировать двоичное число, например, из 7-ми разрядов? И как его потом (для удобства) перевести в десятиричное?