[Пытаюсь написать советник по индикатору QQEA] Нужна помощь
Пытаюсь написать советник по индикатору QQEA. но застрял, как говорится, на самом простом.
Итак, для примера кода использую код советника Hedge Hog
для совместного использования индикатора и советника исп. ф-цию iCustom()
код советника и индикатора во вложении
скрин ошибок, которые мне выдаёт Едитор
Когда Вы правили код советника, то где-то (до 84-ой строки) удалили лишнюю или не добавили правую скобку ")" или "}"
2 Vladon
да, в нём нет ошибок, потому что это код советника Hedge Hog, который я использую в качестве примера
код индикатора
//+------------------------------------------------------------------+
//| Qualitative Quantitative Estimation Indicator for MetaTrader 4 |
//| Copyright © 2006Roman Ignatov |
//| mailto:roman.ignatov@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 200 Roman Ignatov"
#property link "mailto:roman.ignatov@gmail.com"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
#property indicator_color2 Yellow
#property indicator_style2 STYLE_DOT
extern int SF = 5; // original 5
extern int RSI_Period = 14; // original 14
extern double DARFACTOR = 4.236; //original 4.236
int Wilders_Period;
int StartBar;
double TrLevelSlow[];
double AtrRsi[];
double MaAtrRsi[];
double Rsi[];
double RsiMa[];
int init()
{
Wilders_Period = RSI_Period * 2 - 1;
if (Wilders_Period < SF)
StartBar = SF;
else
StartBar = Wilders_Period;
IndicatorBuffers(6);
SetIndexBuffer(0, RsiMa);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexLabel(0, "Value 1");
SetIndexDrawBegin(0, StartBar);
SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
SetIndexBuffer(1, TrLevelSlow);
SetIndexLabel(1, "Value 2");
SetIndexDrawBegin(1, StartBar);
SetIndexBuffer(2, AtrRsi);
SetIndexBuffer(3, MaAtrRsi);
SetIndexBuffer(4, Rsi);
IndicatorShortName(StringConcatenate("QQEA(", SF, ")"));
return(0);
}
int start()
{
int counted, i;
double rsi0, rsi1, dar, tr, dv;
if(Bars <= StartBar)
return (0);
counted = IndicatorCounted();
if(counted < 1)
for(i = Bars - StartBar; i < Bars; i++)
{
TrLevelSlow[i] = 0.0;
AtrRsi[i] = 0.0;
MaAtrRsi[i] = 0.0;
Rsi[i] = 0.0;
RsiMa[i] = 0.0;
}
counted = Bars - counted - 1;
for (i = counted; i >= 0; i--)
Rsi[i] = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, i);
for (i = counted; i >= 0; i--)
{
RsiMa[i] = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
AtrRsi[i] = MathAbs(RsiMa[i + 1] - RsiMa[i]);
}
for (i = counted; i >= 0; i--)
MaAtrRsi[i] = iMAOnArray(AtrRsi, 0, Wilders_Period, 0, MODE_EMA, i);
i = counted + 1;
tr = TrLevelSlow[i];
rsi1 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
while (i > 0)
{
i--;
rsi0 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i);
dar = iMAOnArray(MaAtrRsi, 0, Wilders_Period, 0, MODE_EMA, i) * DARFACTOR;
dv = tr;
if (rsi0 < tr)
{
tr = rsi0 + dar;
if (rsi1 < dv)
if (tr > dv)
tr = dv;
}
else if (rsi0 > tr)
{
tr = rsi0 - dar;
if (rsi1 > dv)
if (tr < dv)
tr = dv;
}
TrLevelSlow[i] = tr;
rsi1 = rsi0;
}
return(0);
}
Когда Вы правили код советника, то где-то (до 84-ой строки) удалили лишнюю или не добавили правую скобку ")" или "}"
если поставить "}" перед 84 строкой, то как бы закрывается ф-цию int Start и дальнейший код не считается и выдаёт ошибку о неожиданном завершении кода
Пытаюсь написать советник по индикатору QQEA. но застрял, как говорится, на самом простом.
Итак, для примера кода использую код советника Hedge Hog
для совместного использования индикатора и советника исп. ф-цию iCustom()
код советника и индикатора во вложении
скрин ошибок, которые мне выдаёт Едитор
А ничего, что выложен один код, а компилируется другой ?
я ж говорю, что я выкладывал архив с моим кодом и кодом индикатора и ссылку на код советника Hedge Hog. А модеры вместо моего архива во вложение поместили код из ссылки
арзив с советником и индикатором
Помогите, пожалуйста в написании пользовательской функции, которая закрывает все позиции, начиная с той, у которой самая большая прибыль.Заранее благодарен!
я ж говорю, что я выкладывал архив с моим кодом и кодом индикатора и ссылку на код советника Hedge Hog. А модеры вместо моего архива во вложение поместили код из ссылки
арзив с советником и индикатором
Прикрепленные файлы://+------------------------------------------------------------------+ //| SimpleProfit.mq4 | //| Copyright © 2012, PAZITIV | //| pazitiv.net | //+------------------------------------------------------------------+ /* Cначала хотел написать советника на основе индикатора QQE Alert v3, но, разобравшись в его коде, понял, что он получает данные из индикатора QQEA. Так зачем же использовать костыли?! ;) */ #property copyright "Copyright © 2012, PAZITIV" #property link "pazitiv.net" //--- input parameters //настройки советника extern string info1 = "Настройки советника" ; extern double LotFix=0.1; extern double MaxRisk = 1; extern int Avarages=3; extern int TakeProfit=10; extern int StopLoss=10; extern int Magic = 8888; extern bool Buy=true; //для открытия ордера на покупку extern bool Sell=true; //для открытия ордера на продажу //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int SF = 5; // original 5 int RSI_Period = 14; // original 14 double DARFACTOR = 4.236; //original 4.236 //------------ Параметры из индикатора QQEA ----------------------- // Buffer0 -- красная жирная double Buffer0 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,0 , 0); // Buffer1 -- жёлтый пунктир double Buffer1 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,1 , 0); //----------------------------------------------------------------- double Lot=GetLot(MaxRisk); // открытие ордеров на Buy/Sell if(Lot==0) {Alert("Недостаточно средств!");return(0);} if (Lot !=0 && Buffer0>Buffer1 && (Buy) ) NewOrder(OP_BUY,Lot) else if (Lot!=0 && Buffer0<Buffer1 && (Sell) ) NewOrder(OP_SELL,Lot); // закрытие существующих ордеров Buy/Sell if (Buffer0>Buffer1) CloseOrder(OrderType(OP_BUY)) else if (Buffer1>Buffer0) CloseOrder(OrderType(OP_SELL)); // ТУТ НАЧИНАЕТ РУГАТЬСЯ НА РАСЧЁТ ЛОТА GETLOT // расчёт лота по риску double GetLot(int Risk) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor( Free *MaxRisk/100/One_Lot/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; if(Lot*One_Lot> Free) return(0.0); return(Lot);} int NewOrder(int Cmd,double Lot) {double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена while(!IsTradeAllowed()) Sleep(100); if(Cmd==OP_BUY) {PR=Ask; if(TakeProfit>0) TP=Ask+TakeProfit*Point; if(StopLoss>0) SL=Ask-StopLoss*Point;} if(Cmd==OP_SELL) {PR=Bid; if(TakeProfit>0) TP=Bid-TakeProfit*Point; if(StopLoss>0) SL=Bid+StopLoss*Point;} int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,Green); if(tic<0) Print("Ошибка открытия ордера:" ,GetLastError()); return(tic);} //±------- закрытие ордеров по рыночной цене ----------------------------------------------------------+ void CloseOrder() {double PR=0; while(!IsTradeAllowed()) Sleep(100); if(OrderType()==OP_BUY) PR=Bid; if(OrderType()==OP_SELL) PR=Ask; if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red)) Print("Ошибка закрытия ордера: ",GetLastError()); return; //±-----------------------------------------------------------------+ //---- return(0); //+------------------------------------------------------------------+Все, что выделено - это ОПИСАНИЕ функций, которые Вы воткнули внутрь функции старт. Описания функций не допускаются внутри других функций. Внутри функции допускается только ВЫЗОВ. К тому же не хватает закрывающих скобок. Начните с изучения учебника и разбора простых кодов - иначе сложно будет что-то пояснить.
Помогите, пожалуйста в написании пользовательской функции, которая закрывает все позиции, начиная с той, у которой самая большая прибыль.Заранее благодарен!
Поверьте мне, разница есть. Просто у позиций разные лоты. А пока они закрываются, рынок движется туда сюда. А у самой прибыльной самый большой лот.И он перекрывает все остальные.
Пытаюсь написать советник по индикатору QQEA. но застрял, как говорится, на самом простом.
Итак, для примера кода использую код советника Hedge Hog
для совместного использования индикатора и советника исп. ф-цию iCustom()
код советника и индикатора во вложении
скрин ошибок, которые мне выдаёт Едитор