• Уважаемый гость! Чтобы просмотреть скрытую часть информации Вам нужно зарегистрироваться.

    Быстрая регистрация!

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

  • Автор темы gor1968
  • Дата начала
G

gor1968

Участник
Регистрация
11.06.2015
Сообщения
2
Реакции
0
я хочу улучить советника, вставить код с временем начало торгов и конца, но мне пишет ошибка, как исправить, Ошибку пишет Выделенным цветом ( if(UseTradingHours) пишет - 'if' - expressions are not allowed on a global scope gor1968.mq4 719 4 )

#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "

Please Login or Register to view hidden text.

"
#include <mt4lib.mqh>

string expert="";
extern bool forex=false; //если счет форекс, то труе, иначе фалзе (нужно для закрытие по профиту)
//extern string list="EURUSD GBPUSD AUDCAD AUDCHF AUDJPY AUDNZD AUDUSD CADCHF CADJPY CHFJPY EURAUD EURCAD EURCHF EURGBP EURJPY EURNZD GBPAUD GBPCAD GBPCHF GBPJPY NZDJPY NZDUSD USDCAD USDCHF USDJPY"; //и т.д. через пробел , наименование должно совпадать с наименованием в терминале (список для опционов, без металлов)
extern string list="EURUSD_OP GBPUSD_OP AUDCAD_OP AUDCHF_OP AUDJPY_OP AUDNZD_OP AUDUSD_OP CADCHF_OP CADJPY_OP CHFJPY_OP EURAUD_OP EURCAD_OP EURCHF_OP EURGBP_OP EURJPY_OP EURNZD_OP GBPAUD_OP GBPCAD_OP GBPCHF_OP GBPJPY_OP NZDJPY_OP NZDUSD_OP USDCAD_OP USDCHF_OP USDJPY_OP"; //и т.д. через пробел , наименование должно совпадать с наименованием в терминале (список для опционов, без металлов)
extern int magic=1310; //маджик
extern double start_lot=1; //начальный лот
extern int timeout=4; //время до эксперации в минутах, если 09 то отключено
extern double tp=0; //тейк
extern double sl=0; //стоп
extern double koef=2.5; //во сколько увеличивать убыточную сделку (множитель лота)
extern double max_lot=1000; //максимальный лот, после которого осуществляется сброс лота на начальный, если выставить макс лот 0, то игнорируем ограничение и увеличиваемся до победного (пока не сольет)
extern int signal_bar=1; //1 по закрытию бара, 0 - по текущему бару (сигнал может пропадать!)
extern int tf=0; //рабочий период для индикатора! в минутах, варианты: 1,5,15,30,60,240
extern double profit=100; //в баксах профит, после которого сбрасываем
extern bool bVirtual=false; //невидимые стопы
extern double trailingstop=0; //трейлинг стоп, указать пунктов через сколкьо он включается

extern int PriceActionFilter = 1;
extern int Length = 3;
extern int MajorCycleStrength = 4;
extern bool UseCycleFilter = false;
extern int UseFilterSMAorRSI = 1;
extern int FilterStrengthSMA = 12;
extern int FilterStrengthRSI = 21;
extern bool UseTradingHours = false;
extern int StartHour = 20; // Начало торговли по времени Брокера
extern int EndHour = 6; // Окончание торговли по времени Брокера
bool alertsOn=false;
extern bool alertsOnMajorCycle = true;
extern bool alertsOnMinorCycle = false;
bool alertsOnCurrent = false;
bool alertsMessage = false;
bool alertsSound = false;
bool alertsNotify = false;
bool alertsEmail = false;

bool arrowsVisible = true;
bool arrowsOnMajorCycle = true;
color arrowsMajorUpCycleColor = LimeGreen;
color arrowsMajorDnCycleColor = Red;
int arrowsMajorUpCycleCode = 241;
int arrowsMajorDnCycleCode = 242;
int arrowsMajorCycleSize = 2;

bool arrowsOnMinorCycle = true;
color arrowsMinorUpCycleColor = DeepSkyBlue;
color arrowsMinorDnCycleColor = PaleVioletRed;
int arrowsMinorUpCycleCode = 159;
int arrowsMinorDnCycleCode = 159;
int arrowsMinorCycleSize = 5;

string arrowsIdentifier = "ci arrows1";
double arrowsUpperGap = 1.0;
double arrowsLowerGap = 1.0;
bool check;
double balance=0;
datetime tm=0;

string symbols[];
int i_tf=0;
datetime tm_start=0;
double g_balance=0;

int max_thread=100; //максимальное кол-во потоков , которые управляет советник одновременно, фактически будет гараздо меньше
bool bPause=false;


if(alertsOnMajorCycle && op==0)
{
if(buy[0]!=0 && buy[1]==0) op=1;
else if(sell[0]!=0 && sell[1]==0) op=-1;
}

if(alertsOnMinorCycle && op==0)
{
if(buy[2]!=0 && buy[3]==0) op=1;
else if(sell[2]!=0 && sell[3]==0) op=-1;
}
}

bool bContinue=false;
all=0;
ArrayInitialize(orders,0);

for(i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS)) continue;

if(symbols[j]==OrderSymbol()) bContinue=true;

if(OrderMagicNumber()==imagic) //проверим есть ли открытые ордера по данному потоку
{
orders[OrderType()]++;
all++;
}
}

if(bContinue) continue; //если мы нашли что по данному инструменту есть открытая сделка, то данный сигнал пропускается
if(all>0) continue; //пропускаем сигнал если есть открытые сделки в этом потоке

//если ордеров в потоке нет, то проверим как закрылись ордера в потоке

if(all==0 && op!=0)
{

int minus=0;
double last_lot=0;
string smb="";

for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if(OrderMagicNumber()==imagic && OrderOpenTime()>=tm_start) //найдем последний закрытый ордер
{
if(OrderType()==OP_BUY && ND3(OrderClosePrice()-OrderOpenPrice())<ND3(0.0)) minus=-1;
if(OrderType()==OP_SELL && ND3(OrderOpenPrice()-OrderClosePrice())<ND3(0.0)) minus=-1;

if(OrderType()==OP_BUY && ND3(OrderClosePrice()-OrderOpenPrice())>ND3(0.0)) minus=0;
if(OrderType()==OP_SELL && ND3(OrderOpenPrice()-OrderClosePrice())>ND3(0.0)) minus=0;

if(OrderType()==OP_BUY && ND3(OrderClosePrice()-OrderOpenPrice())==ND3(0.0))minus=1;
if(OrderType()==OP_SELL && ND3(OrderOpenPrice()-OrderClosePrice())==ND3(0.0))minus=1;

last_lot=OrderLots();
smb=OrderSymbol();
break;
}
}

if(smb==symbols[j] && minus==-1) continue; //если по этой паре был минус то его пропускаем

//Comment("Кол-во минусовых: ",minus);
if(minus==-1) lot=NLot(last_lot*koef);
if(minus==1) lot=NLot(last_lot);
if(minus==0) lot=NLot(start_lot);

if(lot>max_lot && max_lot>0) lot=NLot(start_lot); //выставим лот на начальный

int type=-1;
if(op==1) type=OP_BUY; else type=OP_SELL;
//подбираем лот если у нас рассчитанным не хватит маржи
while(AccountFreeMarginCheck(symbols[j],type,lot)<=0 || GetLastError()==134)
{
lot=NLot(lot/koef); //пробуем уменьшить
}

if(op==1) order_OrderSendNDD(symbols[j],imagic,OP_BUY,lot,-1,sl,tp,DoubleToStr(timeout,0),0,clrBlue,bVirtual);
else if(op==-1) order_OrderSendNDD(symbols[j],imagic,OP_SELL,lot,-1,sl,tp,DoubleToStr(timeout,0),0,clrRed,bVirtual);

}
}
}
//----
}
//+------------------------------------------------------------------+

void my_OrderCloseAll()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS)) continue;

if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
{ //проверим есть ли открытые ордера по другим инструментам
order_OrderClose(OrderTicket(),-1,0,CLR_NONE);
}
}
}
//+------------------------------------------------------------------+

void trailing_forex(double level1,double step1,int trailingpause_time=5,bool bvirtual=false)
{

datetime tm_buy=0,tm_sell=0;
double st;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS)) continue;

if(OrderType()>=2) continue;
if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
{

string n=OrderSymbol();
double tick=MarketInfo(n,MODE_TICKSIZE);

double pt=0;
double stop=OrderStopLoss();
double p=p(n);
if(bvirtual) stop=virtual_get_sl(OrderTicket());

if(OrderType()==OP_BUY)
{
pt=(dBid(n)-OrderOpenPrice())/p;
// Print("buy pt=",pt);

st=NormalizeDouble(MathFloor((dBid(n)-step1*p)/tick)*tick,dDigits(n));
if(pt>=level1 && level1!=0)
{
if(stop==0 || (stop<st && TimeCurrent()-tm_buy>=trailingpause_time))
{
order_OrderModify(OrderTicket(),-1,st,-1,0,Green,bvirtual);
tm_buy=TimeCurrent();
continue;
}
}

}

if(OrderType()==OP_SELL)
{
pt=(OrderOpenPrice()-dAsk(n))/p;

st=NormalizeDouble(MathFloor((dAsk(n)+step1*p)/tick)*tick,dDigits(n));
if(pt>=level1 && level1!=0)
{
if(stop==0 || (stop>st && TimeCurrent()-tm_sell>=trailingpause_time))
{
order_OrderModify(OrderTicket(),-1,st,-1,0,Green,bvirtual);
tm_sell=TimeCurrent();
continue;
}
}

}

}

}

}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void mvirtual_OrdersToVirtual()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS)) continue;
if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
{

if(OrderStopLoss()!=0.0 || OrderTakeProfit()!=0.0)
{
virtual_set(OrderTicket(),OrderStopLoss(),OrderTakeProfit());
order_OrderModify(OrderTicket(),OrderOpenPrice(),0,0,OrderExpiration(),CLR_NONE);
}

}

}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void mvirtual_VirtualToOrders()
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS)) continue;
if(OrderMagicNumber()>=magic && OrderMagicNumber()<=magic+max_thread)
{

if(OrderStopLoss()==0.0 && OrderTakeProfit()==0.0 && virtual_check(OrderTicket()))
{
order_OrderModify(OrderTicket(),-1,virtual_get_sl(OrderTicket()),virtual_get_tp(OrderTicket()),0,CLR_NONE);
}
}

}
}
//+------------------------------------------------------------------+

bool virtual_check(int ticket)
{
if(ticket<=0) return (false);
string n;

if(IsTesting()) n=StringConcatenate("virtual_",DoubleToStr(ticket,0),"_tp");
else n=StringConcatenate(DoubleToStr(ticket,0),"_tp");

if(GlobalVariableCheck(n)) return (true);

if(IsTesting()) n=StringConcatenate("virtual_",DoubleToStr(ticket,0),"_sl");
else n=StringConcatenate(DoubleToStr(ticket,0),"_sl");

if(GlobalVariableCheck(n)) return (true);

return (false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(UseTradingHours)
{
datetime currenttime=TimeHour(TimeCurrent());
if(EndHour<StartHour)
{
EndHour+=24;
if(currenttime<24)
currenttime+=24;
}
if(currenttime<StartHour || currenttime>EndHour)
trade=false;
}
//+------------------------------------------------------------------+
 
  • Панель управления
  • #2
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
К сожалению в данном коде ничего не сделать, он собран из кусков которые никак не связаны друг с другом ...
 
G

gor1968

Участник
Регистрация
11.06.2015
Сообщения
2
Реакции
0
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#include <mt4lib.mqh>

string expert="";
extern bool forex=false; //если счет форекс, то труе, иначе фалзе (нужно для закрытие по профиту)
//extern string list="EURUSD GBPUSD AUDCAD AUDCHF AUDJPY AUDNZD AUDUSD CADCHF CADJPY CHFJPY EURAUD EURCAD EURCHF EURGBP EURJPY EURNZD GBPAUD GBPCAD GBPCHF GBPJPY NZDJPY NZDUSD USDCAD USDCHF USDJPY"; //и т.д. через пробел , наименование должно совпадать с наименованием в терминале (список для опционов, без металлов)
extern string list="EURUSD_OP GBPUSD_OP AUDCAD_OP AUDCHF_OP AUDJPY_OP AUDNZD_OP AUDUSD_OP CADCHF_OP CADJPY_OP CHFJPY_OP EURAUD_OP EURCAD_OP EURCHF_OP EURGBP_OP EURJPY_OP EURNZD_OP GBPAUD_OP GBPCAD_OP GBPCHF_OP GBPJPY_OP NZDJPY_OP NZDUSD_OP USDCAD_OP USDCHF_OP USDJPY_OP"; //и т.д. через пробел , наименование должно совпадать с наименованием в терминале (список для опционов, без металлов)
extern int magic=1310; //маджик
extern double start_lot=1; //начальный лот
extern int timeout=4; //время до эксперации в минутах, если 09 то отключено
extern double tp=0; //тейк
extern double sl=0; //стоп
extern double koef=2.5; //во сколько увеличивать убыточную сделку (множитель лота)
extern double max_lot=1000; //максимальный лот, после которого осуществляется сброс лота на начальный, если выставить макс лот 0, то игнорируем ограничение и увеличиваемся до победного (пока не сольет)
extern int signal_bar=1; //1 по закрытию бара, 0 - по текущему бару (сигнал может пропадать!)
extern int tf=0; //рабочий период для индикатора! в минутах, варианты: 1,5,15,30,60,240
extern double profit=100; //в баксах профит, после которого сбрасываем
extern bool bVirtual=false; //невидимые стопы
extern double trailingstop=0; //трейлинг стоп, указать пунктов через сколкьо он включается

extern int PriceActionFilter = 1;
extern int Length = 3;
extern int MajorCycleStrength = 4;
extern bool UseCycleFilter = false;
extern int UseFilterSMAorRSI = 1;
extern int FilterStrengthSMA = 12;
extern int FilterStrengthRSI = 21;
extern bool UseTradingHours = false;
extern int StartHour = 20; // Начало торговли по времени Брокера
extern int EndHour = 6; // Окончание торговли по времени Брокера
bool alertsOn=false;
extern bool alertsOnMajorCycle = true;
extern bool alertsOnMinorCycle = false;
bool alertsOnCurrent = false;
bool alertsMessage = false;
bool alertsSound = false;
bool alertsNotify = false;
bool alertsEmail = false;

bool arrowsVisible = true;
bool arrowsOnMajorCycle = true;
color arrowsMajorUpCycleColor = LimeGreen;
color arrowsMajorDnCycleColor = Red;
int arrowsMajorUpCycleCode = 241;
int arrowsMajorDnCycleCode = 242;
int arrowsMajorCycleSize = 2;

bool arrowsOnMinorCycle = true;
color arrowsMinorUpCycleColor = DeepSkyBlue;
color arrowsMinorDnCycleColor = PaleVioletRed;
int arrowsMinorUpCycleCode = 159;
int arrowsMinorDnCycleCode = 159;
int arrowsMinorCycleSize = 5;

string arrowsIdentifier = "ci arrows1";
double arrowsUpperGap = 1.0;
double arrowsLowerGap = 1.0;
bool check;
double balance=0;
datetime tm=0;

string symbols[];
int i_tf=0;
datetime tm_start=0;
double g_balance=0;

int max_thread=100; //максимальное кол-во потоков , которые управляет советник одновременно, фактически будет гараздо меньше
bool bPause=false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//----
bPause=false;
check=false;
tm=TimeCurrent();
i_tf=tf;
if(i_tf==0) i_tf=Period();

string s_list=list;
if(IsTesting()) s_list=Symbol();
ushort u_sep=StringGetCharacter(" ",0);

StringSplit(s_list,u_sep,symbols);
Print("Загружено инструментов: ",ArraySize(symbols));

tm_start=(datetime)GlobalVariableGet(StringConcatenate(WindowExpertName(),".time"));
g_balance=GlobalVariableGet(StringConcatenate(WindowExpertName(),".balance"));
Comment("");

if(bVirtual) mvirtual_OrdersToVirtual();
else mvirtual_VirtualToOrders();
//----
return(INIT_SUCCEEDED);

int start()
{
trade=TRUE;
if(UseTradingHours)
{
datetime currenttime=TimeHour(TimeCurrent());
if(EndHour<StartHour)
{
EndHour+=24;
if(currenttime<24)
currenttime+=24;
}
if(currenttime<StartHour || currenttime>EndHour)
trade=false;
}
if(UseTradingHours)
if(trade==FALSE)
Print(currenttime," ============ Trading is ***NOT***allowed now!");
else
Print(currenttime," ************ Trading ***IS ALLOWED*** now!!!");

for(int pos_132=0; pos_132<=OrdersTotal()-1; pos_132++)

}
________________________________________________________________________________________________________________
ошибка:

1. '}' - unexpected end of program gor1968.mq4 760 9
2. '{' - unbalanced parentheses gor1968.mq4 88 3
 
  • Панель управления
  • #4
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
Это первые критические ошибки при их исправлении высыпает еще штук 50 критических ошибок ...
 
  • Панель управления
  • #5
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#include <mt4lib.mqh>

string expert="";
extern bool forex=false; //если счет форекс, то труе, иначе фалзе (нужно для закрытие по профиту)
//extern string list="EURUSD GBPUSD AUDCAD AUDCHF AUDJPY AUDNZD AUDUSD CADCHF CADJPY CHFJPY EURAUD EURCAD EURCHF EURGBP EURJPY EURNZD GBPAUD GBPCAD GBPCHF GBPJPY NZDJPY NZDUSD USDCAD USDCHF USDJPY"; //и т.д. через пробел , наименование должно совпадать с наименованием в терминале (список для опционов, без металлов)
extern string list="EURUSD_OP GBPUSD_OP AUDCAD_OP AUDCHF_OP AUDJPY_OP AUDNZD_OP AUDUSD_OP CADCHF_OP CADJPY_OP CHFJPY_OP EURAUD_OP EURCAD_OP EURCHF_OP EURGBP_OP EURJPY_OP EURNZD_OP GBPAUD_OP GBPCAD_OP GBPCHF_OP GBPJPY_OP NZDJPY_OP NZDUSD_OP USDCAD_OP USDCHF_OP USDJPY_OP"; //и т.д. через пробел , наименование должно совпадать с наименованием в терминале (список для опционов, без металлов)
extern int magic=1310; //маджик
extern double start_lot=1; //начальный лот
extern int timeout=4; //время до эксперации в минутах, если 09 то отключено
extern double tp=0; //тейк
extern double sl=0; //стоп
extern double koef=2.5; //во сколько увеличивать убыточную сделку (множитель лота)
extern double max_lot=1000; //максимальный лот, после которого осуществляется сброс лота на начальный, если выставить макс лот 0, то игнорируем ограничение и увеличиваемся до победного (пока не сольет)
extern int signal_bar=1; //1 по закрытию бара, 0 - по текущему бару (сигнал может пропадать!)
extern int tf=0; //рабочий период для индикатора! в минутах, варианты: 1,5,15,30,60,240
extern double profit=100; //в баксах профит, после которого сбрасываем
extern bool bVirtual=false; //невидимые стопы
extern double trailingstop=0; //трейлинг стоп, указать пунктов через сколкьо он включается

extern int PriceActionFilter = 1;
extern int Length = 3;
extern int MajorCycleStrength = 4;
extern bool UseCycleFilter = false;
extern int UseFilterSMAorRSI = 1;
extern int FilterStrengthSMA = 12;
extern int FilterStrengthRSI = 21;
extern bool UseTradingHours = false;
extern int StartHour = 20; // Начало торговли по времени Брокера
extern int EndHour = 6; // Окончание торговли по времени Брокера
bool alertsOn=false;
extern bool alertsOnMajorCycle = true;
extern bool alertsOnMinorCycle = false;
bool alertsOnCurrent = false;
bool alertsMessage = false;
bool alertsSound = false;
bool alertsNotify = false;
bool alertsEmail = false;

bool arrowsVisible = true;
bool arrowsOnMajorCycle = true;
color arrowsMajorUpCycleColor = LimeGreen;
color arrowsMajorDnCycleColor = Red;
int arrowsMajorUpCycleCode = 241;
int arrowsMajorDnCycleCode = 242;
int arrowsMajorCycleSize = 2;

bool arrowsOnMinorCycle = true;
color arrowsMinorUpCycleColor = DeepSkyBlue;
color arrowsMinorDnCycleColor = PaleVioletRed;
int arrowsMinorUpCycleCode = 159;
int arrowsMinorDnCycleCode = 159;
int arrowsMinorCycleSize = 5;

string arrowsIdentifier = "ci arrows1";
double arrowsUpperGap = 1.0;
double arrowsLowerGap = 1.0;
bool check;
double balance=0;
datetime tm=0;

string symbols[];
int i_tf=0;
datetime tm_start=0;
double g_balance=0;

int max_thread=100; //максимальное кол-во потоков , которые управляет советник одновременно, фактически будет гараздо меньше
bool bPause=false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//----
bPause=false;
check=false;
tm=TimeCurrent();
i_tf=tf;
if(i_tf==0) i_tf=Period();

string s_list=list;
if(IsTesting()) s_list=Symbol();
ushort u_sep=StringGetCharacter(" ",0);

StringSplit(s_list,u_sep,symbols);
Print("Загружено инструментов: ",ArraySize(symbols));

tm_start=(datetime)GlobalVariableGet(StringConcatenate(WindowExpertName(),".time"));
g_balance=GlobalVariableGet(StringConcatenate(WindowExpertName(),".balance"));
Comment("");

if(bVirtual) mvirtual_OrdersToVirtual();
else mvirtual_VirtualToOrders();

//----
return(INIT_SUCCEEDED);
} // ----------
int start()
{
trade=TRUE;
if(UseTradingHours)
{
datetime currenttime=TimeHour(TimeCurrent());
if(EndHour<StartHour)
{
EndHour+=24;
if(currenttime<24)
currenttime+=24;
}
if(currenttime<StartHour || currenttime>EndHour)
trade=false;
}
if(UseTradingHours)
if(trade==FALSE)
Print(currenttime," ============ Trading is ***NOT***allowed now!");
else
Print(currenttime," ************ Trading ***IS ALLOWED*** now!!!");

for(int pos_132=0; pos_132<=OrdersTotal()-1; pos_132++)

}
 
Trader

Trader

Участник
Регистрация
11.04.2015
Сообщения
62
Реакции
12
gor1968, Я по этому сову отвечал в офф-ветке, почему вы там не пишете, там есть исходник, сову писал

Please Login or Register to view hidden text.

Опишите что нужно добавить/удалить/изменить.
Да, и еще: к сове идет еще 2 файла, без них ничего работать не будет. Они у вас есть?
 
Теги Нет
Верх