Fragen Sie! - Seite 135

 
Kalenzo:
Nun, ich denke, dass Sie die Dinge zu sehr verkomplizieren. Versuchen Sie, statt einer großen Funktion einige kürzere Codeteile zu verwenden. Das sollte Ihnen einen Anhaltspunkt geben:

Ich danke Ihnen für Ihre Hilfe. Ich habe versucht, den Code hinzuzufügen, den Sie gesagt haben, aber um ehrlich zu sein, bin ich verloren. Nachdem ich den Code hinzugefügt habe, zeigt der EA eine Slue von Problemen. Ich habe durch die Syntax gehen, aber ich bin verloren.

Ich hatte auch eine Frage zur Verwendung von Funktionen innerhalb der Funktion int start(). Ist das erlaubt? Ist es nicht so, dass die in einer Funktion initialisierten Variablen von anderen Funktionen nicht gesehen werden können?

Also

int start()

{

function( int x)

{

// Etwas tun

return(x)

}

// Etwas tun ... "Kann x in der Funktion start() aufgerufen werden?'

return0;

}

Ich habe meinen EA-Quellcode angehängt. Ihre Hilfe wird sehr geschätzt.

//+------------------------------------------------------------------+

//| CCCCCCCCIEA.mq4 aka 8xCIEA.mq4 |

//| By CuTzPR |

//|------------------------------------------------------------------+

#property copyright "CuTzPR@Forex-TSD"

//---- input parameters

extern double Risk_Percent=10;

extern bool Turned_On=true;

extern bool Allow_Risk=false;

extern bool TimeFilter=false;

extern double FromHourTrade=0; //Adjust for Broker GMT Time

extern double ToHourTrade=23; //Adjust for Broker GMT Time

extern double TP=20; // Take Profit Level

extern int MaxLong=5,MaxShort=5;

extern int MaxOpenOrders=10;

extern double Magic=10000;

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

int ticket;

double Lots;

bool Canopen,BlockTrade;

double Poin; // This variable was included to solve the problem where some brokers use 6 digit quotes instead of 5

static datetime timeprev; // Portion of coded was added to alloy only one trade per bar.

datetime CMT; //Close time of last trade

int total=OrdersTotal();

double Spread=Ask-Bid;

//This portion of code was added to only allow one trade per bar.

if(timeprev==Time[0])

{

return(0); //only execute on new bar

}

else if (timeprev==0)

{

timeprev=Time[0]; // do nothing if freshly added to chart

return(0);

}

else

{

timeprev=Time[0];

}

// End of alllow one trade per bar code

//*****Following code was added to control the Risk per trade.

if (Allow_Risk==true)

Lots=MathCeil(AccountFreeMargin() * Risk_Percent / 10000) / 10;

else Lots=0.1;

//End of Risk Code

//The following code was also included to solve the 6 digit broker quoting

if (Point == 0.00001) Poin = 0.0001; //6 digits

else if (Point == 0.001) Poin = 0.01; //3 digits (for Yen based pairs)

else Poin = Point; //Normal

//End Point Code

// Custom Functions

double cci=iCCI(NULL,PERIOD_M5,5,PRICE_TYPICAL,0);

double SATL=iCustom(NULL,PERIOD_H1,"$SATL",0,1);

// End of Custom Function

//Start of total count of open Long and Short Orders.

int totalOrders (totalBuy)

{

int totalNumber= 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

totalNumber++;

}

return (totalNumber);

}

int totalOrders (totalSell)

{

int totalNumber = 0;

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

totalNumber++;

}

return(totalNumber);

}

int totalBuy = totalOrders(totalBuy);

int totalSell = totalOrders(totalSell);

int EAopenOrders=totalBuy+totalSell;

//End of total Open Long and Short count code

// Time filter Code

if (TimeFilter==true)

{

if (!(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute() <=2))

BlockTrade=true;

else BlockTrade=false;

}

//End of time Filter code

// Are trades allowed to be opened?

if(EAopenOrders<=MaxOpenOrders && BlockTrade==false && Turned_On==true)

Canopen=true;

else if(EAopenOrders>MaxOpenOrders || BlockTrade==true || Turned_On==false)

Canopen=false;

// End of Allow code

//*****Trade Open Order Functions

if(Canopen==true)

{

if (totalBuy<=MaxLong)

{

if (cci>-100 && SATL<Ask)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"CCI0",Magic,0,Blue);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print ("Error opening BUY order : ",GetLastError());

return (0);

}

}

else if (totalSell<=MaxShort)

{

if (cciBid)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"CCI",Magic,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print ("Sell order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL Order : ",GetLastError());

return (0);

}

}

}// End of Trade Open Order Functions

//****Close Orders if they are profitable

for (int cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_BUY && TP != 0 && totalBuy!= 0)

{

if(Bid >= ((OrderOpenPrice()+TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // Long position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

if (OrderMagicNumber()==Magic)

{

if(OrderType()==OP_SELL && TP != 0 && totalSell!=0 )

{

if(Ask <= ((OrderOpenPrice()-TP*Poin)+Spread))

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // Short position closed.

CMT=OrderCloseTime();

return(0);

}

}

}

} // Close Profitable trades loop closed

}// End of Start function

Ihre Hilfe ist sehr willkommen.

 
Limstylz:
Hallo zusammen,

Ursprünglich hatte ich diesen Beitrag als neuen Thread gepostet, aber er wurde in einen anderen Programmier-Thread verschoben (ich habe übrigens keine Einwände gegen die Verschiebung) und scheint nun aufgrund der Menge an Postern in diesem Thread verloren gegangen zu sein.

Vielleicht kann mir hier jemand helfen?

Limstylz, werfen Sie einen Blick auf diesen Ask!-Thread auf Seite 39. Ich denke, dass dort einige Informationen zu finden sind, die Ihnen helfen könnten. Viel Glück!

 

Prost Kumpel...

cutzpr:
Limstylz werfen Sie einen Blick auf diesen Ask!-Thread auf Seite 39. Ich denke, dass dort einige Informationen zu finden sind, die Ihnen helfen könnten. Viel Glück!

Danke cutzpr, aber ich habe es schon hinbekommen... die verdammte Internetverbindung war den ganzen Tag down und ich musste ausnahmsweise meine eigenen Gehirnzellen benutzen

Wie auch immer, um deine Frage über den int start () zu beantworten... Dies ist der Hauptteil des EA und wird kontinuierlich aktualisiert, jeden Tick (ich glaube, das ist richtig).

Ihr Code ist ein wenig verwirrend... können Sie erklären, wo Sie ein Problem erleben? Ich könnte in der Lage sein, zu helfen, wenn Sie die Probleme aufschlüsseln können, obwohl ich wirklich nur lernen MQL4 selbst.

 

Was ist daran falsch?

Könnte mir hier jemand helfen, wenn ich diesen Indikator in meine Meta kopiere, brauche ich mehr als 5 Minuten, nur um meine Meta zu öffnen, aber wenn ich es lösche und meine Meta wieder öffne, wird es wieder normal.

Dateien:
 

Danke!!! es ist großartig!

 

Zurück zum Reißbrett

 

Benutzerdefinierter Indikator in einen Expert Advisor einbetten

Hallo Leute, weiß jemand, wie man den untenstehenden benutzerdefinierten Indikator in einen Expert Advisor einfügt? So dass wir nicht die icustom verwenden müssen, um es aus der Datei aufzurufen?

//+------------------------------------------------------------------+

//| ARSI.mq4

//+------------------------------------------------------------------+

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}
 
yast77:
Hallo Leute, weiß jemand, wie man den benutzerdefinierten Indikator unten in einen Expert Advisor hinzufügen? So dass wir nicht brauchen, verwenden Sie die icustom, um es aus der Datei aufrufen?
//+------------------------------------------------------------------+

//| ARSI.mq4

//+------------------------------------------------------------------+

#property copyright "Alexander Kirilyuk M."

#property link ""

#property indicator_separate_window

//#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 DodgerBlue

extern int ARSIPeriod = 14;

//---- buffers

double ARSI[];

int init()

{

string short_name = "ARSI (" + ARSIPeriod + ")";

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ARSI);

//SetIndexDrawBegin(0,ARSIPeriod);

return(0);

}

int start()

{

int i, counted_bars = IndicatorCounted();

int limit;

if(Bars <= ARSIPeriod)

return(0);

if(counted_bars < 0)

{

return;

}

if(counted_bars == 0)

{

limit = Bars;

}

if(counted_bars > 0)

{

limit = Bars - counted_bars;

}

double sc;

for(i = limit; i >= 0; i--)

{

sc = MathAbs(iRSI(NULL, 0, ARSIPeriod, PRICE_CLOSE, i)/100.0 - 0.5) * 2.0;

if( Bars - i <= ARSIPeriod)

ARSI = Close;

else

ARSI = ARSI + sc * (Close - ARSI);

}

Print ("Try2 : " , ARSI[0], ":", ARSI[1]);

return(0);

}

Sie müssen die Funktion iCustom in Ihrem EA verwenden, um diesen Indikator aufzurufen:

iCustom(Symbol(),0, "ARSI",ARSIPeriod,0,0);

Die Nummer in Rot ist der Balken, den Sie betrachten möchten. Ändern Sie sie nach Bedarf.

FerruFx

 
FerruFx:
Sie müssen die iCustom-Funktion in Ihrem EA verwenden, um diesen Indikator aufzurufen:

iCustom(Symbol(),0, "ARSI",ARSIPeriod,0,0);

Die rote Zahl ist der Balken, den Sie sich ansehen möchten. Ändern Sie sie nach Bedarf.

FerruFx

Vielen Dank für Ihre Antwort. Ya, ich weiß, dass wir die icustom-Funktion verwenden können, aber wie ich weiß, können wir die Indikator-Funktion durch Eingabe der Codierung aus dem Indikator einbetten, die folgende Website Indikatoren Einbettung in Expert Advisors (iCustom Alternative) | www.metatrader.info, die von codersguru erklärt beschreiben, aber für den ARSI-Indikator, ich nicht sicher, wie es in einem Expert Advisor einbetten. Vielen Dank für jede Empfehlung !!

 

Verbesserung von 10points3

Hallo zusammen.

Wir versuchen, 10points3 zu verbessern. Wir müssen den Code ändern, um das letzte Drittel des Handels zu schließen. Bitte beachten Sie die letzten Beiträge hier:

https://www.mql5.com/en/forum/174975/page259.

Wir erhalten hier gute Ergebnisse.