MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 334

 
Top2n :

어떻게 조언하시겠습니까?

if( 지시자 막대의 수 == 권고자 막대의 수)

 
Alexey Kozitsyn :

if( 지시자 막대의 수 == 권고자 막대의 수)


그러나 Expert Advisor에서 지표의 막대 수를 어떻게 알 수 있습니까?

 
Top2n :

그러나 Expert Advisor에서 지표의 막대 수를 어떻게 알 수 있습니까?

BarsCalculated() .
 

안녕하세요, 반환 함수에 대괄호 안에 무엇을 작성해야 하는지 알려주세요.

이전 버전에서는 아무 것도 쓸 수 없지만 최신 버전에서는 뭔가를 처방해야 합니다.

예를 들어 어드바이저 파트의 스크린샷을 보내드립니다.

 
kirill1405 :

안녕하세요, 반환 함수에 대괄호 안에 무엇을 작성해야 하는지 알려주세요.

이전 버전에서는 아무 것도 쓸 수 없지만 최신 버전에서는 뭔가를 처방해야 합니다.

예를 들어 어드바이저 파트의 스크린샷을 보내드립니다.

괄호 안에는 함수의 종류에 해당하는 값/변수를 써야 합니다. 함수가 bool인 경우 대괄호에는 true 또는 false 또는 bool 유형 의 변수가 포함되어야 합니다. 다른 유형의 기능도 마찬가지입니다. 함수가 void이면 그냥 반환하십시오.
 
Alexey Kozitsyn :
괄호 안에는 함수의 종류에 해당하는 값/변수를 써야 합니다. 함수가 bool인 경우 대괄호에는 true 또는 false 또는 bool 유형 의 변수가 포함되어야 합니다. 다른 유형의 기능도 마찬가지입니다. 함수가 void이면 그냥 반환하십시오.

거기에 반환 기능에 필요한 것을 떨어뜨렸다는 것을 그림에서 알 수 있습니까?

어떻게 보일지 더 잘 이해하기 위해

감사하다!

 
kirill1405 :

거기에 반환 기능에 필요한 것을 떨어뜨렸다는 것을 그림에서 알 수 있습니까?

어떻게 보일지 더 잘 이해하기 위해

감사하다!

내가 말했듯이 올바른 값을 반환하려면 함수의 유형을 알아야 합니다. 그리고 사진에는 나와있지 않습니다.
 

쉬우면 봐주세요

파일:
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);
}
//------------------------------------------------------------