Добрый день. Согласно задумке советник должен проверять условия и открывать ордера при появлении нового бара.
Выдаёт ошибку "function declarations are allowed on global, namespace or class scope only". Перевёл :"объявления функций разрешены только в глобальной области, пространстве имен или классе". Всё равно ничего не понял, тупенький. Расскажите пожалуйста или подскажите где прочесть. Заранее спасибо!)
Для начала код размести нормально, чтоб можно было читать
Есть вот такая функция для размещения кода, всем будет удобнее читать твой код чтобы помочь.
Для начала код размести нормально, чтоб можно было читать
Есть вот такая функция для размещения кода, всем будет удобнее читать твой код чтобы помочь.
bool New_Bar=false; // Флаг нового бараbool Work=true; // Эксперт будет работатьstring Symb; // Название финансового инструмента//---------------------------------------------//+------------------------------------------------------------------+//| Блок 2//| Запуск эксперта //| |//+------------------------------------------------------------------+intOnInit()
{
//---Alert ("Запуск эксперта");
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Блок 3//| Рабочая часть эксперта //| //+------------------------------------------------------------------+voidOnStart ()
{
//+------------------------------------------------------------------+//| Блок 4//| Задаём переменные //| //+------------------------------------------------------------------+int
Total, // Колличество ордеров в окне
Tip=-1, // Тип выбранного ордера (В=0, S=1)
Ticket; // Номер ордера// Колличество баров для 2-го условия //---------------------------------------------double
MA_1_t, // Значение МА1 текущее
MA_2_t, // Значение МА2 текущее// Колличество лотов в выбранном ордере// Максимальное колличество лотов
Free, // Текущее колличество свободных средств
Bar_Close1=iClose (NULL, 0, 1), // Цена закрытия 1 бара
Bar_Close2=iClose (NULL, 0, 2), // Цена закрытия 2 бара
Bar_Close3=iClose (NULL, 0, 3), // Цена закрытия 3 бара// Цена закрытия 4 бара
Lot, //
Price,
Lts, // Минимум свободных средств
SL, // SL выбранного ордера
TP; // TP выбранного ордера//---------------------------------------------bool
Bars_Y1=false, // 1 критерий закрытие Bars_X подряд выше друг друга
Bars_Y2=false, // 1 критерий закрытие Bars_X подряд ниже друг друга
Open_B=false, // Критерий открытия Bay
Open_S=false; // Критерий открытия Sell//+------------------------------------------------------------------+//| Блок 5//| Предварительная обработка //| //+------------------------------------------------------------------+if (Bars < Period_MA_2) // Недостаточно баров
{
Alert ( "Недостаточно баров в окне. Эксперт не работает.");
return; // Выход из start ()
}
if (Work==false)
{
Alert ("Критическая ошибка. Эксперт не работает.");
return; // Выход из start ()
}
//--------------------------------------------- Новый бар
Fun_New_Bar(); // Обращение к ф-ииif (New_Bar==false) // Если бар не новый..return; // ..то уходимvoid Fun_New_Bar () // Появление нового бара
{
staticdatetime New_Time=Time[0]; //
New_Bar=false; // Не новый барif(New_Time!=Time[0]) // Проверка времени
{
New_Time=Time[0]; //
New_Bar=true; //
}
}
'Period_MA_2' - undeclared identifier Wai_v_5.0.mq4 64 12
variable 'Total' not used Wai_v_5.0.mq4 31 1
variable 'Ticket' not used Wai_v_5.0.mq4 33 1
variable 'MA_1_t' not used Wai_v_5.0.mq4 37 1
variable 'MA_2_t' not used Wai_v_5.0.mq4 38 1
variable 'Free' not used Wai_v_5.0.mq4 42 1
variable 'Lot' not used Wai_v_5.0.mq4 47 1
variable 'Price' not used Wai_v_5.0.mq4 48 1
variable 'Lts' not used Wai_v_5.0.mq4 49 1
variable 'SL' not used Wai_v_5.0.mq4 50 1
variable 'TP' not used Wai_v_5.0.mq4 51 1
1 errors, 10 warnings 2 11
Откуда этот кусок кода? Надо весь код, чтоб увидеть ошибку
Сразу не увидел и не понял, что нужно весь эксперт скидывать.
externdouble StopLoss=200; // SL для открываемого ордераexterndouble TakeProfit=300; // TP для открываемого ордераexterndouble Lots=5; // Колличество лотов не должно превышатьexterndouble Lots_X=0.3; // Размер лотаexterndouble Prots=0.4; // Процент свободных средств//---------------------------------------------externint Period_MA_1=10; // Период МА_1 быстраяexternint Period_MA_2=50; // Период МА_2 медленная//---------------------------------------------bool isNewBar(); // Функция нового бара???bool Work=true; // Эксперт будет работатьstring Symb; // Название финансового инструмента//---------------------------------------------//+------------------------------------------------------------------+//| Блок 2//| Запуск эксперта //| |//+------------------------------------------------------------------+intOnInit()
{
//---Alert ("Запуск эксперта");
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Блок 3//| Рабочая часть эксперта //| //+------------------------------------------------------------------+voidOnStart ()
{
//+------------------------------------------------------------------+//| Блок 4//| Задаём переменные //| //+------------------------------------------------------------------+int
Total, // Колличество ордеров в окне
Tip=-1, // Тип выбранного ордера (В=0, S=1)
Ticket; // Номер ордера// Колличество баров для 2-го условия //---------------------------------------------double
MA_1_t, // Значение МА1 текущее
MA_2_t, // Значение МА2 текущее// Колличество лотов в выбранном ордере// Максимальное колличество лотов
Free, // Текущее колличество свободных средств
Bar_Close1=iClose (NULL, 0, 1), // Цена закрытия 1 бара
Bar_Close2=iClose (NULL, 0, 2), // Цена закрытия 2 бара
Bar_Close3=iClose (NULL, 0, 3), // Цена закрытия 3 бара// Цена закрытия 4 бара
Lot, //
Price,
Lts, // Минимум свободных средств
SL, // SL выбранного ордера
TP; // TP выбранного ордера//---------------------------------------------bool
Bars_Y1=false, // 1 критерий закрытие Bars_X подряд выше друг друга
Bars_Y2=false, // 1 критерий закрытие Bars_X подряд ниже друг друга
Open_B=false, // Критерий открытия Bay
Open_S=false; // Критерий открытия Sell//+------------------------------------------------------------------+//| Блок 5//| Предварительная обработка //| //+------------------------------------------------------------------+if (Bars < Period_MA_2) // Недостаточно баров
{
Alert ("Недостаточно баров в окне. Эксперт не работает.");
return; // Выход из start ()
}
if (Work==false)
{
Alert ("Критическая ошибка. Эксперт не работает.");
return; // Выход из start ()
}
//+------------------------------------------------------------------+//| Блок 6//| Учёт ордеров //| //+------------------------------------------------------------------+
Symb=Symbol(); // Название финансового инструмента
Total=0; // Колличество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>5) // Не более одного орд
{
Alert("Рыночных ордеров больше 5-и. Эксперт не работает.");
return; // Выход из start()
}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//+------------------------------------------------------------------+//| Блок 7//| Определение торговых критериев //| //+------------------------------------------------------------------+//--------------------------------------------- Новый барbool isNewBar()
{
staticdatetime last_time=0; //в статической переменной будем помнить время открытия последнего бараdatetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE); // текущее времяif(last_time==0) // если это первый вызов функции
{
last_time=lastbar_time; // установим время и выйдем return(false);
}
if(last_time!=lastbar_time) // если время отличается
{
last_time=lastbar_time; // запомним время и вернем truereturn(true);
}
return(false); // дошли до этого места - значит бар не новый, вернем false
}
//--------------------------------------------- 1 условие
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); //MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); //MA_2//--------------------------------------------- 2 условиеif (Bar_Close1 > Bar_Close2 > Bar_Close3 ) // Условие на Buy
{
Bars_Y1=true; // Условие выполнено
}
if ( Bar_Close1 < Bar_Close2 < Bar_Close3) // Условие на Sell
{
Bars_Y2=true; // Условие выполнено
}
//--------------------------------------------- Критерийif (MA_1_t > MA_2_t && Bars_Y1==true) // Если МА1 выше МА2 и цены закрытия у Bars_x баров
{ // подряд выше друг друга
Open_B=true; // Критерий открытия Buy
}
if (MA_1_t < MA_2_t && Bars_Y2==true) // Если МА1 ниже МА2 и цены закрытия у Bars_x баров
{ // подряд ниже друг друга
Open_S=true; // Критерий открытия Sell
}
//+------------------------------------------------------------------+//| Блок 8//| Закрытие или модернизация ордеров //| //+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Блок 9//| Вычисление свободных средств //| Вычисление стоимости ордеров //+------------------------------------------------------------------+
RefreshRates(); // Обновление данных
Free=AccountFreeMargin(); // Свободн средства
Lts=MathFloor(Free*Prots); // Минимум свободных средствif (Lts> Free) //
{
Alert("Не хватает денег!");
return; // Выход из start()
}
//+------------------------------------------------------------------+//| Блок 10//| Открытие ордеров //|//+------------------------------------------------------------------+while(true) // Цикл закрытия орд.
{
if (Total==0 && Open_B==true) // Открытых орд. нет +
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=Bid - StopLoss*Point; // Вычисление SL откр.
TP=Bid + TakeProfit*Point; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lots_X,Ask,2,SL,TP);//Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
if (Total==0 && Open_S==true) // Открытых орд. нет +
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=Ask + StopLoss*Point; // Вычисление SL откр.
TP=Ask - TakeProfit*Point; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lots_X,Bid,2,SL,TP);//Открытие Selif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
break; // Выход из while
}
//-------------------------------------------------------------------return; // Выход из start()
}
//+------------------------------------------------------------------+//| Блок 11//| Обработка ошибок //| //+------------------------------------------------------------------+int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//+------------------------------------------------------------------+//| Блок 12//| Проверка стоп приказов //| //+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Блок 13//| Прекращение исполнения эксперта //| //+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---Alert ("Эксперт выключен!");
}
Сразу не увидел и не понял, что нужно весь эксперт скидывать.
Я выделил то, что было не так
externdouble StopLoss=200; // SL для открываемого ордераexterndouble TakeProfit=300; // TP для открываемого ордераexterndouble Lots=5; // Колличество лотов не должно превышатьexterndouble Lots_X=0.3; // Размер лотаexterndouble Prots=0.4; // Процент свободных средств//---------------------------------------------externint Period_MA_1=10; // Период МА_1 быстраяexternint Period_MA_2=50; // Период МА_2 медленная//---------------------------------------------//bool isNewBar(); // Функция нового бара???bool Work=true; // Эксперт будет работатьstring Symb; // Название финансового инструмента//---------------------------------------------//+------------------------------------------------------------------+//| Блок 2//| Запуск эксперта //| |//+------------------------------------------------------------------+intOnInit()
{
//---Alert ("Запуск эксперта");
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Блок 3//| Рабочая часть эксперта //| //+------------------------------------------------------------------+voidOnStart ()
{
//+------------------------------------------------------------------+//| Блок 4//| Задаём переменные //| //+------------------------------------------------------------------+int
Total, // Колличество ордеров в окне
Tip=-1, // Тип выбранного ордера (В=0, S=1)
Ticket; // Номер ордера// Колличество баров для 2-го условия //---------------------------------------------double
MA_1_t, // Значение МА1 текущее
MA_2_t, // Значение МА2 текущее// Колличество лотов в выбранном ордере// Максимальное колличество лотов
Free, // Текущее колличество свободных средств
Bar_Close1=iClose (NULL, 0, 1), // Цена закрытия 1 бара
Bar_Close2=iClose (NULL, 0, 2), // Цена закрытия 2 бара
Bar_Close3=iClose (NULL, 0, 3), // Цена закрытия 3 бара// Цена закрытия 4 бара
Lot, //
Price,
Lts, // Минимум свободных средств
SL, // SL выбранного ордера
TP; // TP выбранного ордера//---------------------------------------------bool
Bars_Y1=false, // 1 критерий закрытие Bars_X подряд выше друг друга
Bars_Y2=false, // 1 критерий закрытие Bars_X подряд ниже друг друга
Open_B=false, // Критерий открытия Bay
Open_S=false; // Критерий открытия Sell//+------------------------------------------------------------------+//| Блок 5//| Предварительная обработка //| //+------------------------------------------------------------------+if (Bars < Period_MA_2) // Недостаточно баров
{
Alert ("Недостаточно баров в окне. Эксперт не работает.");
return; // Выход из start ()
}
if (Work==false)
{
Alert ("Критическая ошибка. Эксперт не работает.");
return; // Выход из start ()
}
//+------------------------------------------------------------------+//| Блок 6//| Учёт ордеров //| //+------------------------------------------------------------------+
Symb=Symbol(); // Название финансового инструмента
Total=0; // Колличество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>5) // Не более одного орд
{
Alert("Рыночных ордеров больше 5-и. Эксперт не работает.");
return; // Выход из start()
}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
//+------------------------------------------------------------------+//| Блок 7//| Определение торговых критериев //| //+------------------------------------------------------------------+//--------------------------------------------- 1 условие
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); //MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); //MA_2//--------------------------------------------- 2 условиеif (Bar_Close1 > Bar_Close2 > Bar_Close3 ) // Условие на Buy
{
Bars_Y1=true; // Условие выполнено
}
if ( Bar_Close1 < Bar_Close2 < Bar_Close3) // Условие на Sell
{
Bars_Y2=true; // Условие выполнено
}
//--------------------------------------------- Критерийif (MA_1_t > MA_2_t && Bars_Y1==true) // Если МА1 выше МА2 и цены закрытия у Bars_x баров
{ // подряд выше друг друга
Open_B=true; // Критерий открытия Buy
}
if (MA_1_t < MA_2_t && Bars_Y2==true) // Если МА1 ниже МА2 и цены закрытия у Bars_x баров
{ // подряд ниже друг друга
Open_S=true; // Критерий открытия Sell
}
//+------------------------------------------------------------------+//| Блок 8//| Закрытие или модернизация ордеров //| //+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Блок 9//| Вычисление свободных средств //| Вычисление стоимости ордеров //+------------------------------------------------------------------+
RefreshRates(); // Обновление данных
Free=AccountFreeMargin(); // Свободн средства
Lts=MathFloor(Free*Prots); // Минимум свободных средствif (Lts> Free) //
{
Alert("Не хватает денег!");
return; // Выход из start()
}
//+------------------------------------------------------------------+//| Блок 10//| Открытие ордеров //|//+------------------------------------------------------------------+while(true) // Цикл закрытия орд.
{
if (Total==0 && Open_B==true) // Открытых орд. нет +
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=Bid - StopLoss*Point; // Вычисление SL откр.
TP=Bid + TakeProfit*Point; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lots_X,Ask,2,SL,TP);//Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
if (Total==0 && Open_S==true) // Открытых орд. нет +
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=Ask + StopLoss*Point; // Вычисление SL откр.
TP=Ask - TakeProfit*Point; // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lots_X,Bid,2,SL,TP);//Открытие Selif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
break; // Выход из while
}
//-------------------------------------------------------------------return; // Выход из start()
}
//+------------------------------------------------------------------+//| Блок 11//| Обработка ошибок //| //+------------------------------------------------------------------+int Fun_Error(int Error) // Ф-ия обработ ошибок
{
switch(Error)
{ // Преодолимые ошибки case4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеreturn(1); // Выход из функцииcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеreturn(1); // Выход из функцииcase137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000); // Простое решениеreturn(1); // Выход из функцииcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеreturn(1); // Выход из функции// Критические ошибкиcase2: Alert("Общая ошибка.");
return(0); // Выход из функцииcase5: Alert("Старая версия терминала.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase64: Alert("Счет заблокирован.");
Work=false; // Больше не работатьreturn(0); // Выход из функцииcase133:Alert("Торговля запрещена.");
return(0); // Выход из функцииcase134:Alert("Недостаточно денег для совершения операции.");
return(0); // Выход из функцииdefault: Alert("Возникла ошибка ",Error); // Другие варианты return(0); // Выход из функции
}
}
//+------------------------------------------------------------------+//| Блок 12//| Проверка стоп приказов //| //+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Блок 13//| Прекращение исполнения эксперта //| //+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---Alert ("Эксперт выключен!");
}
//--------------------------------------------- Новый барbool isNewBar()
{
staticdatetime last_time=0; //в статической переменной будем помнить время открытия последнего бараdatetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE); // текущее времяif(last_time==0) // если это первый вызов функции
{
last_time=lastbar_time; // установим время и выйдем return(false);
}
if(last_time!=lastbar_time) // если время отличается
{
last_time=lastbar_time; // запомним время и вернем truereturn(true);
}
return(false); // дошли до этого места - значит бар не новый, вернем false
}if (isNewBar()==true)
желтым выделил не нужное, можно удалить
функция выделенная зеленым, должна быть за пределами OnStart(),
там где нужно определить новый бар используй выделенное коричневым
Здравствуйте. Всех с прошедшими праздниками, всем удачи в новом году.
Советник торгует по точкам ДеМарка, используя простенький индикатор по этим точкам. Нужно, чтобы при выключении терминала, сохранялись данные точек. А при запуске советник мог использовать сохраненные данные, а дальше работать по программе. Возможно ли это. Я так понимаю, что это можно сделать при помощи функции типаFileOpen(). Но никогда не делал. Подскажите как правильно. Вот пара функций для вычисления цены двух точек. Остальные аналогичны. Как сохранить данные этих функций.
Здравствуйте. Всех с прошедшими праздниками, всем удачи в новом году.
Советник торгует по точкам ДеМарка, используя простенький индикатор по этим точкам. Нужно, чтобы при выключении терминала, сохранялись данные точек. А при запуске советник мог использовать сохраненные данные, а дальше работать по программе. Возможно ли это. Я так понимаю, что это можно сделать при помощи функции типа FileOpen(). Но никогда не делал. Подскажите как правильно. Вот пара функций для вычисления цены двух точек. Остальные аналогичны. Как сохранить данные этих функций.
я бы добавил в советник создание объектов по точкам ДеМарка и уже по этим объектам торговать
Графический объект - это изображение в окне финансового инструмента, которое можно выделить, переместить, изменить или удалить. К графическим объектам относятся, например, горизонтальные и вертикальные линии, канал линейной регрессии, уровни Фибоначчи, прямоугольник, текстовая метка и пр. Такие изображения, как индикаторные линии, уровни...
Добрый день.
Согласно задумке советник должен проверять условия и открывать ордера при появлении нового бара.
Выдаёт ошибку "function declarations are allowed on global, namespace or class scope only". Перевёл :"объявления функций разрешены только в глобальной области, пространстве имен или классе".
Всё равно ничего не понял, тупенький. Расскажите пожалуйста или подскажите где прочесть. Заранее спасибо!)
Для начала код размести нормально, чтоб можно было читать
Есть вот такая функция для размещения кода, всем будет удобнее читать твой код чтобы помочь.
Buba_rus:
Всё равно ничего не понял, тупенький. Расскажите пожалуйста или подскажите где прочесть. Заранее спасибо!
Откуда этот кусок кода? Надо весь код, чтоб увидеть ошибку
Для начала код размести нормально, чтоб можно было читать
Есть вот такая функция для размещения кода, всем будет удобнее читать твой код чтобы помочь.
Откуда берешь?
Это опять не весь код...дело твое
вот ошибки
Откуда этот кусок кода? Надо весь код, чтоб увидеть ошибку
Сразу не увидел и не понял, что нужно весь эксперт скидывать.
Сразу не увидел и не понял, что нужно весь эксперт скидывать.
Я выделил то, что было не так
желтым выделил не нужное, можно удалить
функция выделенная зеленым, должна быть за пределами OnStart(),
там где нужно определить новый бар используй выделенное коричневым
Здравствуйте. Всех с прошедшими праздниками, всем удачи в новом году.
Советник торгует по точкам ДеМарка, используя простенький индикатор по этим точкам. Нужно, чтобы при выключении терминала, сохранялись данные точек. А при запуске советник мог использовать сохраненные данные, а дальше работать по программе. Возможно ли это. Я так понимаю, что это можно сделать при помощи функции типа FileOpen(). Но никогда не делал. Подскажите как правильно. Вот пара функций для вычисления цены двух точек. Остальные аналогичны. Как сохранить данные этих функций.
Здравствуйте. Всех с прошедшими праздниками, всем удачи в новом году.
Советник торгует по точкам ДеМарка, используя простенький индикатор по этим точкам. Нужно, чтобы при выключении терминала, сохранялись данные точек. А при запуске советник мог использовать сохраненные данные, а дальше работать по программе. Возможно ли это. Я так понимаю, что это можно сделать при помощи функции типа FileOpen(). Но никогда не делал. Подскажите как правильно. Вот пара функций для вычисления цены двух точек. Остальные аналогичны. Как сохранить данные этих функций.
я бы добавил в советник создание объектов по точкам ДеМарка и уже по этим объектам торговать
я бы добавил в советник создание объектов по точкам ДеМарка и уже по этим объектам торговать
Спасибо за ответ. Но, если я не ошибаюсь, ваш совет касается MQL5. Мой советник на языке MQL4.
Я не программист, любитель, для себя.Спасибо за ответ. Но, если я не ошибаюсь, ваш совет касается MQL5. Мой советник на языке MQL4.
Я не программист, любитель, для себя.mql4 тоже можно вот