Скачать MetaTrader 5

Помогите скомпилировать советник.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Проси своего брокера открыть официальный канал. Новости прочитают тысячи трейдеров!
Brom
64
Brom 2007.01.12 22:49 
Скачал советник из чемпионата 'Phoenix_4_CONTEST.mq4'... При компиляции дает сообщение:1 ошибок, 1 предупреждений
Появляются такие строчки:1)'п»ї' - expression on global scope not allowed C:\Program Files\experts\Phoenix_4_CONTEST.mq4 (1, 1)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------и 2)'п»ї' - variable not defined C:\Program Files\experts\Phoenix_4_CONTEST.mq4 (1, 1)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------Посоветуйте-как правильно скомпилировать советники с чемпионата.-------------------------------------------------------------Остальные советники с библиотеки компилируются нормально.
Sceptic Philozoff
Модератор
17844
Sceptic Philozoff 2007.01.13 05:07  
Ты бы хоть код его выложил, что ли, если хочешь, чтобы на твое сообщение отреагировали: советник-то не стандартный, не включенный в пакет МТ4, а выдуманный Hendrickом. А еще лучше спросить самого автора там же, где его скачал. Он-то точно свой советник лучше кого угодно знает...
Дмитрий
181
Дмитрий 2007.01.13 08:45  

У тебя в коде переменная, но ее значение не определено
того он и ругается.

Brom
64
Brom 2007.01.13 10:25  

ВОТ СОВЕТНИК О КОТОРОМ Я ГОВОРИЛ:п»ї//+------------------------------------------------------------------+
//| Phoenix_v4_2_CONTEST. mq4 |
//| Copyright © 2006, Hendrick |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Hendrick."

#define MAGICMA 20050610

extern double Lots = 1;
extern double MaximumRisk = 0.3;
extern double DecreaseFactor = 1;
extern bool PrefSettings = true;
extern bool MM = true;
extern bool AccountIsMicro = false;
extern int TakeProfit = 0;
extern int StopLoss = 0;
extern int TrailingStop = 0;
extern bool UseSignal1 = true;
extern bool UseSignal2 = true;
extern bool UseSignal3 = true;
extern bool UseSignal4 = true;
extern bool UseSignal5 = true;

extern int SMAPeriod = 0;
extern int SMA2Bars = 0;
extern double Percent = 0;
extern int EnvelopePeriod = 0;
extern int OSMAFast = 0;
extern int OSMASlow = 0;
extern double OSMASignal = 0;

extern int TradeFrom1 = 0;
extern int TradeUntil1 = 24;
extern int TradeFrom2 = 0;
extern int TradeUntil2 = 0;
extern int TradeFrom3 = 0;
extern int TradeUntil3 = 0;
extern int TradeFrom4 = 0;
extern int TradeUntil4 = 0;

extern int Fast_Period = 0;
extern int Fast_Price = PRICE_OPEN;
extern int Slow_Period = 0;
extern int Slow_Price = PRICE_OPEN;
extern double DVBuySell = 0;
extern double DVStayOut = 0;


//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}

//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal();
int losses=0;

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);

if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor, 1);
}

if(lot<0.1) lot=0.1;
if(MM==false) lot=Lots;
if(AccountIsMicro==true) lot=lot/10;
//--- for CONTEST only
if(lot > 5) lot=5;
return(lot);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{

int res;

//==============PREFERRED SETTINGS==============================

if(PrefSettings == true)
{
if(Symbol() == "USDJPY")
{
SMAPeriod = 7;
SMA2Bars = 14;
Percent = 0. 0032;
TakeProfit = 42;
StopLoss = 84;
TrailingStop = 0;
OSMAFast = 5;
OSMASlow = 30;
OSMASignal = 2;
EnvelopePeriod = 2;
Fast_Period = 25;
Slow_Period = 15;
DVBuySell = 0.003;
DVStayOut = 0.024;

}
}


//=====================SIGNAL1=======================

bool BuySignal1=false, SellSignal1=false;

double HighEnvelope1 = iEnvelopes(NULL,0,EnvelopePeriod,MODE_SMA,0,PRICE_CLOSE,Percent, MODE_UPPER,1);
double LowEnvelope1 = iEnvelopes(NULL,0,EnvelopePeriod,MODE_SMA,0,PRICE_CLOSE, Percent, MODE_LOWER,1);
double CloseBar1 = iClose(NULL,0,1);

if(UseSignal1)
{
if(CloseBar1 > HighEnvelope1) {SellSignal1 = true;}
if(CloseBar1 < LowEnvelope1) {BuySignal1 = true;}
}
else {SellSignal1=true;BuySignal1=true;}

//=====================SIGNAL2=======================

bool BuySignal2=false, SellSignal2=false;

double SMA1=iMA(NULL,0,SMAPeriod,0,MODE_SMA,5,1);
double SMA2=iMA(NULL,0,SMAPeriod,0,MODE_SMA,5,SMA2Bars);

if(UseSignal2)
{
if(SMA2-SMA1>0) {BuySignal2 = true;}
if(SMA2-SMA1<0) {SellSignal2 = true;}
}
else {SellSignal2=true;BuySignal2=true;}

//=====================SIGNAL3=======================

bool BuySignal3=false, SellSignal3=false;

double OsMABar2=iOsMA(NULL,0,OSMASlow,OSMAFast,OSMASignal,PRICE_CLOSE,2);
double OsMABar1=iOsMA(NULL,0,OSMASlow,OSMAFast,OSMASignal,PRICE_CLOSE,1);

if(UseSignal3)
{
if(OsMABar2 > OsMABar1) {SellSignal3 = true;}
if(OsMABar2 < OsMABar1) {BuySignal3 = true;}
}
else {SellSignal3=true;BuySignal3=true;}



//=====================SIGNAL4=======================

double diverge;
bool BuySignal4=false,SellSignal4=false;

diverge = divergence(Fast_Period, Slow_Period, Fast_Price, Slow_Price, 0);

if(UseSignal4)
{
if(diverge >= DVBuySell && diverge <= DVStayOut)
{BuySignal4 = true;}
if(diverge <= (DVBuySell*(-1)) && diverge >= (DVStayOut*(-1)))
{SellSignal4 = true;}
}
else {SellSignal4=true;BuySignal4=true;}



//=====================SIGNAL5=======================

bool BuySignal5=false, SellSignal5=false;

if(UseSignal5)
{
int iHour=TimeHour(LocalTime());
int ValidTradeTime = F_ValidTradeTime(iHour);
if(ValidTradeTime==true)
{
BuySignal5=true;
SellSignal5=true;
}
}
else {SellSignal5=true;BuySignal5=true;}


//=================END SIGNALS=====


//=================SELL CONDITIONS=====


if((SellSignal1==true) && (SellSignal2==true) && (SellSignal3==true) && (SellSignal4==true) && (SellSignal5==true))
{
if(AccountFreeMargin()<(1000*LotsOptimized()))
{
Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0);
}
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid, 3, Bid+StopLoss*Point, Bid-TakeProfit*Point, "Phoenix3",MAGICMA,0,Red);
return;
}
//=================BUY CONDITIONS====


if((BuySignal1==true) && (BuySignal2==true) && (BuySignal3==true) && (BuySignal4==true) && (BuySignal5==true))
{
if(AccountFreeMargin()<(1000*LotsOptimized()))
{
Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0);
}
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask, 3,Ask-StopLoss*Point, Ask+TakeProfit*Point, "Phoenix3",MAGICMA,0,Blue);
return;
}

//=================END SELL/BUY CONDITIONS==========================

}


//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
{
if(OrderType() == OP_BUY)
{
if(TrailingStop > 0)
{
if((Bid-OrderOpenPrice()) > (Point*TrailingStop))
{
if((OrderStopLoss()) < (Bid-Point*TrailingStop))
{
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-Point*TrailingStop, OrderTakeProfit(), 0,GreenYellow);
return(0);
}
}
}

}

if(OrderType() == OP_SELL)
{
if(TrailingStop > 0)
{
if(OrderOpenPrice()-Ask>Point*TrailingStop)
{
if(OrderStopLoss()>Ask+Point*TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+Point*TrailingStop, OrderTakeProfit(), 0,Red);
return(0);
}
}
}
}
}
}
}

//======================Start function=======================


void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}

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

double divergence(int F_Period, int S_Period, int F_Price, int S_Price, int mypos)
{
int i;
//----
double maF1, maF2, maS1, maS2;
double dv1, dv2;
//----
maF1 = iMA(Symbol(), 0, F_Period, 0, MODE_SMA, F_Price, mypos);
maS1 = iMA(Symbol(), 0, S_Period, 0, MODE_SMA, S_Price, mypos);
dv1 = (maF1 - maS1);

maF2 = iMA(Symbol(), 0, F_Period, 0, MODE_SMA, F_Price, mypos + 1);
maS2 = iMA(Symbol(), 0, S_Period, 0, MODE_SMA, S_Price, mypos + 1);
dv2 = ((maF1 - maS1) - (maF2 - maS2));
//----
return(dv1 - dv2);
}

//=============== FUNCTION VALID TRADE TIME

bool F_ValidTradeTime (int iHour)
{
if(((iHour >= TradeFrom1) && (iHour <= (TradeUntil1-1)))||((iHour>= TradeFrom2) && (iHour <= (TradeUntil2-1)))||((iHour >= TradeFrom3)&& (iHour <= (TradeUntil3-1)))||((iHour >= TradeFrom4) && (iHour <=(TradeUntil4-1))))
{
return (true);
}
else
return (false);
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------вОЗМОЖНО ЛИ ЗАПУСТИТЬ ЕГО В МТ4 Я не программер,поэтому если можно -конкретно.

Sceptic Philozoff
Модератор
17844
Sceptic Philozoff 2007.01.13 14:44  
ВОТ СОВЕТНИК О КОТОРОМ Я ГОВОРИЛ:п»ї//+------------------------------------------------------------------+


В самой первой строке явная ошибка, которую я выделил синим цветом (если код начинается именно с этих символов). Так как комментарий начинается потом, то компилятор воспринимает это как код. Это явно лишнее, так как вначале идут комментарии автора, которые обычно располагаются перед первой строкой кода. Убери синее из кода и попробуй скомпилить. Возможно, ты не очень корректно сохранил советник - или архиватор как-то глюкнул (что сомнительно).

Запустить его, конечно, можно, так как он для МТ4 и создан (Чемпионат-то был недавно). Но я его не запускал, он меня не интересует. Мой совет тебе: подучи немного MQL4, он несложный, очень похож на Си. Зато у тебя появится куча возможностей, о которых ты даже не подозреваешь, да и глупых вопросов будешь меньше задавать. В сетке или на этом же форуме вроде бы должны быть приличные русскоязычные урководства по этому языку.

Brom
64
Brom 2007.01.13 15:21  
Mathemat писал (а):
ВОТ СОВЕТНИК О КОТОРОМ Я ГОВОРИЛ:п»ї//+------------------------------------------------------------------+


В самой первой строке явная ошибка, которую я выделил синим цветом (если код начинается именно с этих символов). Так как комментарий начинается потом, то компилятор воспринимает это как код. Это явно лишнее, так как вначале идут комментарии автора, которые обычно располагаются перед первой строкой кода. Убери синее из кода и попробуй скомпилить. Возможно, ты не очень корректно сохранил советник - или архиватор как-то глюкнул (что сомнительно).


Запустить его, конечно, можно, так как он для МТ4 и создан (Чемпоинат-то был недавно). Но я его не запускал, он меня не интересует. Мой совет тебе: подучи немного MQL4, он несложный, очень похож на Си. Зато у тебя появится куча возможностей, о которых ты даже не подозреваешь, да и глупых вопросов будешь меньше задавать. В сетке или на этом же форуме вроде бы должны быть приличные русскоязычные урководства по этому языку.



Спасибо за ответ.Попробую.Насчет языка MQL4-согласен ,наверное придется-и знаю откуда начать.Кстати есть книга по Turbo Paskal 7.0 .Или это ненадо?-----------------------------------------------------А на форексе работаю вручную.Выработал твердую систему.но вручную тяжело и время занимает и нервов требуется много,вот и ищу чтото приличное механическое.-------------------------------------------------------------------О результатах пробы сообщу.
Sceptic Philozoff
Модератор
17844
Sceptic Philozoff 2007.01.13 15:47  
Трубо Паскакал, конечно, неплохо. Этот язык дисциплинирует, но все же лучше начать с Си. Он намного ближе к MQL4, да и концептуально в своих основах несложен. А еще лучше - сразу с MQL4, не такой он и сложный.

А насчет механического я с тобой полностью согласен, нервов будешь тратить намного меньше, да и потенция сохранится...
Brom
64
Brom 2007.01.13 16:25  
   Скомпилировался без ошибок но на тестере (М15 дол-инена. как у участника)сливает быстро.
Sceptic Philozoff
Модератор
17844
Sceptic Philozoff 2007.01.13 16:28  
Ну это уже другая проблема. Чемпионат он закончил пятым, так что он не настолько плох. Твой главный вопрос в ветке был связан с компиляцией.
Yuriy Zaytsev
13960
Yuriy Zaytsev 2007.01.13 16:37  
BROM писал (а):
Скомпилировался без ошибок но на тестере (М15 дол-инена. как у участника)сливает быстро.

автор о нем говорил что он ОСОБЕННО хорош во флете

Без обид просто фразу вспомнил!
Как говорил один знакомый
во флете и моя бабушка получит профит


Сам автор действительно написал хорошую программу!!!
Дмитрий
181
Дмитрий 2007.01.13 16:37  
BROM писал (а):
Скомпилировался без ошибок но на тестере (М15 дол-инена. как у участника)сливает быстро.

Перечитай интервью с автором советника.
Он сам удивляется что советник не слил.
 
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий