Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 334

 
Top2n:

Que pensez-vous de ça ?

si( nombre de barres de l'indicateur == nombre de barres de l'EA )

 
Alexey Kozitsyn:

si( nombre de barres de l'indicateur == nombre de barres de l'EA )


Alors comment puis-je obtenir le nombre de barres d'indicateurs dans l'EA ?

 
Top2n:

Alors comment puis-je obtenir le nombre de barres de l'indicateur dans l'EA ?

BarsCalculated().
 

Bonjour, pourriez-vous me dire ce qu'il faut écrire entre parenthèses pour la fonction de retour ?

Dans l'ancienne version, vous ne pouvez rien écrire, mais dans la nouvelle version, vous devez écrire quelque chose.

Je vous enverrai une capture d'écran de la partie de l'EA à titre d'exemple.

 
kirill1405:

Bonjour, pourriez-vous me dire ce qu'il faut écrire entre parenthèses pour la fonction de retour ?

Dans l'ancienne version, vous ne pouvez rien écrire, mais dans la nouvelle version, vous devez écrire quelque chose.

Je vous enverrai une capture d'écran de la partie de l'EA à titre d'exemple.

Vous devez écrire entre parenthèses la valeur/variable qui correspond au type de fonction. Si la fonction est un bool, alors entre parenthèses doit figurer true ou false, ou une variable du type bool. Pour les autres types de fonctions, c'est la même chose. Si la fonction est nulle, il suffit de la retourner ;
 
Alexey Kozitsyn:
La valeur/variable correspondant au type de fonction doit être écrite entre parenthèses. Si la fonction est un bool, elle doit être vraie ou fausse, ou une variable du type bool. Pour les autres types de fonctions - de la même manière. Si la fonction est nulle, il suffit de la retourner ;

Pourriez-vous me dire, à partir de l'image que j'ai déposée, ce qui est nécessaire pour la fonction de retour ?

pour avoir une meilleure idée de ce à quoi il devrait ressembler.

Merci !

 
kirill1405:

Pourriez-vous me dire, à partir de l'image que j'ai déposée, ce qui est nécessaire pour la fonction de retour ?

pour avoir une meilleure idée de ce à quoi il devrait ressembler.

Merci !

Comme je l'ai déjà dit, pour renvoyer une valeur correcte, vous devez connaître le type de la fonction. Et la photo ne le montre pas.
 

Voilà, si ça ne vous dérange pas trop.

Dossiers :
lmdf9hx.mq4  10 kb
 
kirill1405:

Voilà, si ça ne vous dérange pas trop.

Collez le code via le bouton SRC, pas envie de le télécharger, de le regarder et de le supprimer.
 
Alexey Kozitsyn:
Collez le code via le bouton SRC, pas envie de le télécharger, de le regarder et de le supprimer.

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