Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 334

 
Top2n:

А как подскажете?

if( количество баров индикатора == количество баров советника ) 

 
Alexey Kozitsyn:

if( количество баров индикатора == количество баров советника ) 


А как же мне получить количество баров индикатора в советнике?

 
Top2n:

А как же мне получить количество баров индикатора в советнике?

BarsCalculated().
 

здравствуйте, подскажите пожалуйста что писать в скобках для функции return?

в старой версии можно ничего не писать , а в более новой нужно что то прописывать

как пример вышлю скрин части советника

 
kirill1405:

здравствуйте, подскажите пожалуйста что писать в скобках для функции return?

в старой версии можно ничего не писать , а в более новой нужно что то прописывать

как пример вышлю скрин части советника

В скобках нужно написать значение/переменную, соответствующую типу функции. Если функция bool - в скобках должно быть true или false или переменную типа bool. Для остальных типов функций - аналогично. Если функция void - то просто return;
 
Alexey Kozitsyn:
В скобках нужно написать значение/переменную, соответствующую типу функции. Если функция bool - в скобках должно быть true или false или переменную типа bool. Для остальных типов функций - аналогично. Если функция void - то просто return;

не могли бы вы по той картинке , которую я сбросил, сказать что там нужно для функции return?

чтобы нагляднее понять как это должно выглядеть

спасибо!

 
kirill1405:

не могли бы вы по той картинке , которую я сбросил, сказать что там нужно для функции return?

чтобы нагляднее понять как это должно выглядеть

спасибо!

Как я уже сказал, для того, чтобы вернуть корректное значение, нужно знать тип функции. А на картинке это не указано.
 

вот посмотрите пожалуйста, если несложно

Файлы:
lmdf9hx.mq4  10 kb
 
kirill1405:

вот посмотрите пожалуйста, если несложно

Вставьте код через кнопку SRC, скачивать его, смотреть и удалять нет желания.
 
Alexey Kozitsyn:
Вставьте код через кнопку SRC, скачивать его, смотреть и удалять нет желания.

extern double StopLoss = 100;
extern double TakeProfit = 400;
extern int Period_MA_1 = 100;
extern int Period_MA_2 = 150;
extern double  Rasst = 40;
extern double Lots = 0.5;


bool Work = true;
string Symb;
//------------------------------------------------2
int start()
{
int
Total,     //количество ордеров в окне
Tip = -1,
Ticket;    // тип выбранного ордера 
double
MA_1_t,    // текущее значение средней №1 
MA_2_t,    // текущее значение средней №2
Lot,       // количество лотов в выбранном ордере
Lts,       // Количество лотов в открыв. ордере 
Min_Lot,   // минимальное количество лотов
Step,      // шаг изменения размера лота
Free,     // текущие свободные средства
One_Lot,  // стоимость одного лота
Price,    // цена выбранного ордера
SL,      // стоплосс выбранного ордера 
TP;      // тейкпрофит выбранного ордера 
bool
Ans = false,
Cls_B = false,
Cls_S = false,
Opn_B = false,
Opn_S = false;
//----------------------------------------------  3
// предварительная обработка
if (Bars < Period_MA_2)
{
Alert ("Недостаточно баров в окне. Эксперт не работает");
}
return;
if (Work==false)
{
Alert ("Критическая ошибка. Эксперт не работает");
}
return;
//здесь можно указать разные параметры например задать время работы эксперта
//----------------------------------------------  4
// учет ордеров
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  ;
}
Total++;     //счетчик рыночных ордеров
if (Total>1)
{
Alert ("Несколько рыночных ордеров. Эксперт не работает.");
return ;
}
Ticket=OrderTicket();
Tip=OrderType();
Price=OrderOpenPrice();
SL=OrderStopLoss();
TP=OrderTakeProfit();
Lot=OrderLots();
}
}
// Торговые критерии
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_CLOSE,0);
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_CLOSE,0);
if (MA_1_t>MA_2_t+Rasst*Point)
{
Opn_B=true;
Cls_S=true;
}
if (MA_1_t<MA_2_t-Rasst*Point)
{
Opn_S=true;
Cls_B=true;
}
//--------------------------------------------
// закрытие ордеров
while (true)
{
if (Tip==0 && Cls_B==true)
{
Alert ("Попытка закрыть Buy ",Ticket,"ожидание ответа..");
RefreshRates();
Ans=OrderClose(Ticket,Lot,Bid,2);
if (Ans==true)
{
Alert ("Закрыт ордер Buy" ,Ticket);
break;
}
if  (Fun_Error(GetLastError())==1)
continue;
return;
}
if (Tip==1 && Cls_S==true)
{
Alert ("Попытка закрыть Sell ",Ticket,"ожидание ответа..");
RefreshRates();
Ans=OrderClose(Ticket,Lot,Ask,2);
if (Ans==true)
{
Alert ("Закрыт ордер Sell" ,Ticket);
break;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
}
break;
}
//-------------------------------------------------
// расчет размера позиций
RefreshRates();
Min_Lot=MarketInfo(Symb,MODE_MINLOT);
Free = AccountFreeMargin();
One_Lot = MarketInfo(Symb,MODE_MARGINREQUIRED);
Step = MarketInfo(Symb,MODE_LOTSTEP);
if (Lots>0)
Lts=Lots;
if (Lts<Min_Lot)
Lts=Min_Lot;
if (Lts*One_Lot<Free)
{
Alert ("Не хватает денежных средств на ",Lts," лотов");
return;
}
//--------------------------------------------
// блок открытия ордеров
while (true)
{
if (Total==0 && Opn_B==true)
{
RefreshRates();
SL=Bid-New_Stop(StopLoss)*Point;
TP=Bid+New_Stop(TakeProfit)*Point;
Alert ("Попытка открыть ордер BUY. Ожидаем ответа..");
Ticket = OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);
if (Ticket>0)
{
Alert (" Открыт ордер BUY" ,Ticket);
return ;
}
if (Fun_Error(GetLastError())==1)
continue;
return ;
}
if (Total==0 && Opn_S==true)
{
RefreshRates();
SL=Ask-New_Stop(StopLoss)*Point;
TP=Ask+New_Stop(TakeProfit)*Point;
Alert ("Попытка открыть ордер Sell. Ожидаем ответа..");
Ticket = OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);
if (Ticket>0)
{
Alert (" Открыт ордер Sell" ,Ticket);
return ;
}
if (Fun_Error(GetLastError())==1)
continue;
return ;
}
break;
}
//-----------------------------------------------------------
return;
}
//---------------------------------------------------------
int Fun_Error (int Error)
{
switch (Error)
{
default : Alert ("Возникла ошибка ",Error);
return(0);
}
}
//-------------------------------------------------------------
int New_Stop (int Parametr)
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);
if (Parametr<Min_Dist)
{
Parametr=Min_Dist;
Alert ("Увеличена дистанция стоп приказа");
}
return(Parametr);
}
//------------------------------------------------------------
Причина обращения: