Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 334

 
Top2n:

Wie wäre es damit?

if( Anzahl der Indikatorbalken == Anzahl der EA-Balken )

 
Alexey Kozitsyn:

if( Anzahl der Indikatorbalken == Anzahl der EA-Balken )


Wie bekomme ich also die Anzahl der Indikatorbalken im EA?

 
Top2n:

Also, wie bekomme ich die Anzahl der Balken des Indikators in der EA?

BarsCalculated().
 

Hallo, könnten Sie mir bitte sagen, was ich in die Klammern für die Rückgabefunktion schreiben soll?

In der alten Version dürfen Sie nichts schreiben, aber in der neueren Version müssen Sie etwas schreiben

Ich sende Ihnen einen Screenshot des Teils des EA als Beispiel

 
kirill1405:

Hallo, könnten Sie mir bitte sagen, was ich in die Klammern für die Rückgabefunktion schreiben soll?

In der alten Version dürfen Sie nichts schreiben, aber in der neueren Version müssen Sie etwas schreiben

Ich sende Ihnen einen Screenshot des Teils des EA als Beispiel

Sie müssen den Wert/die Variable, die dem Funktionstyp entspricht, in Klammern schreiben. Wenn die Funktion ein bool ist, sollte in Klammern true oder false stehen, oder eine Variable vom Typ bool. Für andere Funktionstypen gilt das Gleiche. Wenn die Funktion ungültig ist - einfach zurückgeben;
 
Alexey Kozitsyn:
Der Wert/die Variable, der/die dem Funktionstyp entspricht, sollte in Klammern geschrieben werden. Wenn die Funktion ein bool ist, sollte sie true oder false sein, oder eine Variable vom Typ bool in Klammern. Für andere Funktionstypen gilt Ähnliches. Wenn die Funktion ungültig ist - einfach zurückgeben;

Können Sie mir anhand des Bildes, das ich fallen gelassen habe, sagen, was für die Rückgabefunktion benötigt wird?

Um eine bessere Vorstellung davon zu bekommen, wie es aussehen sollte.

Ich danke Ihnen!

 
kirill1405:

Können Sie mir anhand des Bildes, das ich fallen gelassen habe, sagen, was für die Rückgabefunktion benötigt wird?

um eine bessere Vorstellung davon zu bekommen, wie es aussehen sollte.

Ich danke Ihnen!

Wie ich bereits sagte, müssen Sie den Funktionstyp kennen, um einen korrekten Wert zurückgeben zu können. Und auf dem Bild sieht man es nicht.
 

Bitte sehr, wenn es nicht zu viel Mühe macht

Dateien:
lmdf9hx.mq4  10 kb
 
kirill1405:

Bitte sehr, wenn es nicht zu viel Mühe macht

Fügen Sie den Code über die SRC-Schaltflächeein. Sie müssen ihn nicht erst herunterladen, ansehen und löschen.
 
Alexey Kozitsyn:
Fügen Sie den Code über die SRC-Schaltfläche ein. Sie müssen ihn nicht erst herunterladen, ansehen und löschen.

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);
}
//------------------------------------------------------------
Grund der Beschwerde: