Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 334

 
Top2n:

Che ne dite di questo?

se( numero di barre dell'indicatore == numero di barre dell'EA)

 
Alexey Kozitsyn:

se( numero di barre dell'indicatore == numero di barre dell'EA)


Quindi come faccio a ottenere il numero di barre dell'indicatore nell'EA?

 
Top2n:

Quindi come faccio a ottenere il numero di barre dell'indicatore nell'EA?

BarsCalculated().
 

Ciao, potresti dirmi cosa scrivere tra parentesi per la funzione di ritorno?

Nella vecchia versione si può non scrivere nulla, ma nella versione più recente è necessario scrivere qualcosa

Vi invio uno screenshot della parte dell'EA come esempio

 
kirill1405:

Ciao, potresti dirmi cosa scrivere tra parentesi per la funzione di ritorno?

Nella vecchia versione si può non scrivere nulla, ma nella versione più recente è necessario scrivere qualcosa

Vi invio uno screenshot della parte dell'EA come esempio

Dovete scrivere tra parentesi il valore/variabile che corrisponde al tipo di funzione. Se la funzione è un bool, allora tra parentesi dovrebbe esserci true o false, o una variabile del tipo bool. Per altri tipi di funzione, allo stesso modo. Se la funzione è nulla - basta restituire;
 
Alexey Kozitsyn:
Il valore/variabile corrispondente al tipo di funzione deve essere scritto tra parentesi. Se la funzione è un bool, dovrebbe essere vero o falso, o una variabile del tipo bool. Per altri tipi di funzione - in modo simile. Se la funzione è nulla - basta restituire;

Potresti dirmi dall'immagine che mi è caduta cosa è necessario per la funzione di ritorno?

per avere un'idea migliore di come dovrebbe essere.

Grazie!

 
kirill1405:

Potresti dirmi dall'immagine che mi è caduta cosa è necessario per la funzione di ritorno?

per avere un'idea migliore di come dovrebbe essere.

Grazie!

Come ho detto, per restituire un valore corretto, è necessario conoscere il tipo di funzione. E la foto non lo mostra.
 

Ecco qui, se non è troppo disturbo

File:
lmdf9hx.mq4  10 kb
 
kirill1405:

Ecco qui, se non è troppo disturbo

Incolla il codice tramite il pulsante SRC, non c'è voglia di scaricarlo, guardarlo e cancellarlo.
 
Alexey Kozitsyn:
Incolla il codice tramite il pulsante SRC, non c'è voglia di scaricarlo, guardarlo e cancellarlo.

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