[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 597
Guten Tag, weiterhin mit der Codierung in den Griff zu bekommen, nahm das Beispiel EA aus dem Tutorial Abschnitt Artikel, ersetzt den Code aus dem Beispiel:
Auf eine beliebige zu Schulungszwecken:
Könnten Sie mir bitte sagen, woran das liegt und wie ich den Code korrigieren kann?
double MA_1[]; // нет обьявления размера, не видно как (локально или глобально) обьявлен,
// не видно оператора двигающего индекс массива.// лучше пока не освоили работу с массивами обьявите переменные и не парьтесьdouble MA_0=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,0);
double MA_1=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,1);
if (MA_1 < MA_0)
{ // ..МА последнего бара выше предыдущего
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
}
if (MA_1 > MA_0)
{ // ..МА последнего бара ниже предыдущего
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
}
Urain, danke, ich bin immer wieder erstaunt über die Logik von mql, und wenn Sie versuchen, for(int i=1; zu versuchen, das Skript wird nicht vereinfachen - könnten Sie mir sagen, wie es zu formatieren, kann ich noch nicht das Gefühl, die Logik der Sprache, wie man den Operator, der das Array bewegt definieren?
P. S. Ich habe das Array deklariert, das aus Versehen im Beispielskript entfernt wurde:
Abzasc: Preisunterschiede. Infolgedessen ergeben sich unterschiedliche, im Gegenteil, Indikatoren...
Ich sehe da keinen Unterschied. Vergessen Sie die Indikatoren, auch hier ist der richtige für Sie derjenige, mit dem Sie handeln. Sie konzentrieren sich überhaupt nicht auf das Richtige.
extern int n = 20; extern int t3_period = 5; extern double b = 0,618; extern int int mBars = 300; extern int Bars.Count = 0; int i,t,c; double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n, AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;
//+------------------------------------------------------------------+ int init() { SetIndexStyle(0, DRAW_LINE); SetIndexPuffer(0, Buf1); SetIndexStyle(1, DRAW_LINE); SetIndexPuffer(1, Buf2); return(0); } //+------------------------------------------------------------------+ int start() { int-Grenze; wenn (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted(); if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count; for(int i=0; i<limit; i++) {
Guten Tag. Ein Array wurde deklariert, der Operator, der den Array-Index verschiebt, wurde festgelegt, aber die Aufträge werden nicht erteilt. Bitte sagen Sie mir, was los ist.
Haben Sie die Standardhilfe von MetaEditore gelesen? Wenn nicht, lesen Sie die ganze...
Craft:
Guten Tag. Ich habe ein Array deklariert und den Operator definiert, der den Array-Index verschiebt, aber die Aufträge werden nicht platziert. Bitte sagen Sie mir, was los ist.
Könnt ihr mir sagen, ob es möglich ist, die Funktion von Igor Kim umzuschreiben, die alle Verlustaufträge schließt, deren Verlust einen bestimmten Wert überschreitet:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 25.04.2008 |//| Описание : Закрытие тех позиций, у которых убыток в валюте депозита |//| превысил некоторое значение |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pr - профит/убыток |//+----------------------------------------------------------------------------+void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}
Ich muss eine offene Position finden, die den größten Verlust aufweist. Der Punkt ist, dass ich die Position mit mehr Gewinn als die Verlustposition finden muss und sie im Gegenschluss schließen muss. Vielleicht hat jemand Erfahrung damit oder stand schon einmal vor einem solchen Problem?
Warum können drei Indikatoren, die auf unterschiedlichen Prinzipien beruhen, nicht fast das gleiche Bild zeigen (Spearman, Stochastik und McDrsy) - aber nicht die richtige Bewegung und den richtigen Einstieg mit einer Wahrscheinlichkeit von über 60% anzeigen?
Hallo, ich frage mich, welcher Code benötigt wird, um eine Order zu schließen, nachdem sie den Punkt X im Gewinn überschritten hat und begonnen hat, auf den Punkt Y>OrderOpenPrice zu fallen und dann geschlossen werden muss.
Haben Sie die Standardhilfe von MetaEditore gelesen? Wenn nicht, lesen Sie das Ganze...
Von kindischen Alter, um eine Frage zu stellen, ohne angesprochen zu haben, um zu helfen und yandex sind gewachsen. Es gibt viele Sendungen, aber die Stellen werden nicht besetzt:
double MA_1[];
ArrayResize(MA_1,Period_MA);
for(int j=0;j<=Period_MA-1;j++)
MA_1[j]=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,j);
if (MA_1[j+1] < MA_1[j])
{ //
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
}
if (MA_1[j+1] > MA_1[j])
{ //
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
}
// Открытие ордеровwhile(true) // Цикл закрытия орд.
{
if (Total==0 && Opn_B==true) // Открытых орд. нет +
{ // критерий откр. Buy
RefreshRates(); // Обновление данных
SL=Bid - New_Stop(StopLoss); // Вычисление SL откр.
TP=Bid + New_Stop(TakeProfit); // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
if (Total==0 && Opn_S==true) // Открытых орд. нет +
{ // критерий откр. Sell
RefreshRates(); // Обновление данных
SL=Ask + New_Stop(StopLoss); // Вычисление SL откр.
TP=Ask - New_Stop(TakeProfit); // Вычисление TP откр.Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Открытие Selif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Sell ",Ticket);
return; // Выход из start()
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
break; // Выход из while
}
Guten Tag, weiterhin mit der Codierung in den Griff zu bekommen, nahm das Beispiel EA aus dem Tutorial Abschnitt Artikel, ersetzt den Code aus dem Beispiel:
Auf eine beliebige zu Schulungszwecken:
Könnten Sie mir bitte sagen, woran das liegt und wie ich den Code korrigieren kann?Urain, danke, ich bin immer wieder erstaunt über die Logik von mql, und wenn Sie versuchen, for(int i=1; zu versuchen, das Skript wird nicht vereinfachen - könnten Sie mir sagen, wie es zu formatieren, kann ich noch nicht das Gefühl, die Logik der Sprache, wie man den Operator, der das Array bewegt definieren?
P. S. Ich habe das Array deklariert, das aus Versehen im Beispielskript entfernt wurde:
Preisunterschiede. Infolgedessen ergeben sich unterschiedliche, im Gegenteil, Indikatoren...
#Eigenschaft indicator_buffers 2
#Eigenschaft indicator_color1 blau
#Eigenschaft indicator_color2 Rot
extern int n = 20;
extern int t3_period = 5;
extern double b = 0,618;
extern int int mBars = 300;
extern int Bars.Count = 0;
int i,t,c;
double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n,
AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;
//+------------------------------------------------------------------+
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexPuffer(0, Buf1);
SetIndexStyle(1, DRAW_LINE);
SetIndexPuffer(1, Buf2);
return(0); }
//+------------------------------------------------------------------+
int start() {
int-Grenze;
wenn (IndicatorCounted()<0) return(-1);
limit=Bars-IndicatorCounted();
if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
for(int i=0; i<limit; i++)
{
b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b3); c4=(1+3*b+b3+3*b2); n1=t3_period;
if(n1<1) n1=1; n1=1+0,5*(n1-1); w1=2/(n1+1); w2=1-w1;
if(AcBars==0) AcBars=Bars-mBars;
for(c=AcBars; c<=Bars-1; c +++) { i=Bars-1-c; {
if(Close[i]>Close[i+1]) { Ch_p[i]=Close[i]-Close[i+1]; CF_p[i]=Ch_p[i]+CF_p[i+1]; Ch_n[i]=0; CF_n[i]=0; }
else { Ch_p[i]=0; CF_p[i]=0; Ch_n[i]=Close[i+1]-Close[i]; CF_n[i]=Ch_n[i]+CF_n[i+1]; }}
for(t=i+n; t>=i; t--) { ch_p=Ch_p[t]+ch_p; ch_n=Ch_n[t]+ch_n ; cff_p=CF_p[t]+cff_p; cff_n=CF_n[t]+cff_n; }
k_p=ch_p-cff_n; k_n=ch_n-cff_p;
A1=k_p; e1=w1*A1+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4;
e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3=c1*e6+c2*e5+c3*e4+c4*e3; Buf1[i]=t3;
A2=k_n; e12=w1*A2+w2*e12; e22=w1*e12+w2*e22; e32=w1*e22+w2*e32; e42=w1*e32+w2*e42;
e52=w1*e42+w2*e52; e62=w1*e52+w2*e62; t32=c1*e62+c2*e52+c3*e42+c4*e32; Buf2[i]=t32;
AcBars=AcBars+1; ch_p=0; ch_n=0; cff_p=0; cff_n=0; }
}
return(0); }
Können Sie mir sagen, wo der Fehler nicht aktualisiert wird, der Verlauf ist normal und der Onlineverlauf ist es nicht
Guten Tag. Ein Array wurde deklariert, der Operator, der den Array-Index verschiebt, wurde festgelegt, aber die Aufträge werden nicht erteilt. Bitte sagen Sie mir, was los ist.
Versuchen SieOrderSend, dann funktioniert es...
Haben Sie die Standardhilfe von MetaEditore gelesen? Wenn nicht, lesen Sie die ganze...
Guten Tag. Ich habe ein Array deklariert und den Operator definiert, der den Array-Index verschiebt, aber die Aufträge werden nicht platziert. Bitte sagen Sie mir, was los ist.
Ich muss eine offene Position finden, die den größten Verlust aufweist.
Der Punkt ist, dass ich die Position mit mehr Gewinn als die Verlustposition finden muss und sie im Gegenschluss schließen muss.
Vielleicht hat jemand Erfahrung damit oder stand schon einmal vor einem solchen Problem?
Versuchen Sie OrderSend, dann funktioniert es...
Haben Sie die Standardhilfe von MetaEditore gelesen? Wenn nicht, lesen Sie das Ganze...
Von kindischen Alter, um eine Frage zu stellen, ohne angesprochen zu haben, um zu helfen und yandex sind gewachsen. Es gibt viele Sendungen, aber die Stellen werden nicht besetzt: