Скачать MetaTrader 5

[Пытаюсь написать советник по индикатору QQEA] Нужна помощь

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Pazitiv
130
Pazitiv  

Пытаюсь написать советник по индикатору QQEA. но застрял, как говорится, на самом простом.

Итак, для примера кода использую код советника Hedge Hog

для совместного использования индикатора и советника исп. ф-цию iCustom()

код советника и индикатора во вложении

скрин ошибок, которые мне выдаёт Едитор


Файлы:
expert1.mq4 4 kb
PapaYozh
3768
PapaYozh  
PAZITIV:

Пытаюсь написать советник по индикатору QQEA. но застрял, как говорится, на самом простом.

Итак, для примера кода использую код советника Hedge Hog

для совместного использования индикатора и советника исп. ф-цию iCustom()

код советника и индикатора во вложении

скрин ошибок, которые мне выдаёт Едитор



Когда Вы правили код советника, то где-то (до 84-ой строки) удалили лишнюю или не добавили правую скобку ")" или "}"
Vladislav Andruschenko
94263
Vladislav Andruschenko  
в вложении только код советника, в нем ошибок нет
Pazitiv
130
Pazitiv  

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);
}

Pazitiv
130
Pazitiv  
PapaYozh:

Когда Вы правили код советника, то где-то (до 84-ой строки) удалили лишнюю или не добавили правую скобку ")" или "}"


если поставить "}" перед 84 строкой, то как бы закрывается ф-цию int Start и дальнейший код не считается и выдаёт ошибку о неожиданном завершении кода
Vladyslav Goshkov
2153
Vladyslav Goshkov  
PAZITIV:

Пытаюсь написать советник по индикатору QQEA. но застрял, как говорится, на самом простом.

Итак, для примера кода использую код советника Hedge Hog

для совместного использования индикатора и советника исп. ф-цию iCustom()

код советника и индикатора во вложении

скрин ошибок, которые мне выдаёт Едитор


А ничего, что выложен один код, а компилируется другой ?
Pazitiv
130
Pazitiv  
VladislavVG:
А ничего, что выложен один код, а компилируется другой ?



я ж говорю, что я выкладывал архив с моим кодом и кодом индикатора и ссылку на код советника Hedge Hog. А модеры вместо моего архива во вложение поместили код из ссылки

арзив с советником и индикатором

Файлы:
qqea.mq4 4 kb
pgm5
21
pgm5  

Помогите, пожалуйста в написании пользовательской функции, которая закрывает все позиции, начиная с той, у которой самая большая прибыль.Заранее благодарен!

Vladyslav Goshkov
2153
Vladyslav Goshkov  
PGM5:

я ж говорю, что я выкладывал архив с моим кодом и кодом индикатора и ссылку на код советника 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);
  
//+------------------------------------------------------------------+

Все, что выделено - это ОПИСАНИЕ функций, которые Вы воткнули внутрь функции старт. Описания функций не допускаются внутри других функций. Внутри функции допускается только ВЫЗОВ. К тому же не хватает закрывающих скобок. Начните с изучения учебника и разбора простых кодов - иначе сложно будет что-то пояснить.
Всеволод
648
Всеволод  
PGM5:

Помогите, пожалуйста в написании пользовательской функции, которая закрывает все позиции, начиная с той, у которой самая большая прибыль.Заранее благодарен!


Если закрывать все позиции, то какая разница с какой начинать?
pgm5
21
pgm5  

Поверьте мне, разница есть. Просто у позиций разные лоты. А пока они закрываются, рынок движется туда сюда. А у самой прибыльной самый большой лот.И он перекрывает все остальные.

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий