Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 538

 
denis77515:

Hallo Herr Fachmann, weigern Sie sich nicht, einen Neuling in der Programmierung, schauen Sie sich den Code, um zu sehen, ob es richtig geschrieben ist. Wer nicht zu faul ist, sich damit zu befassen. Ich kann sie nicht mit dem Strategy Tester testen, weil sie mehrere Währungen enthält. DieDatei mit dem Code und den Indikatoren ist dem Archiv beigefügt.


Ich habe für Sie eine einzige Funktion ausgearbeitet, um verknüpfte Arrays von Symbolen und Anzahl der Aufträge (offene Positionen) zum Kauf und Verkauf zu erstellen. Testen Sie das Skript, indem Sie ein paar Positionen auf einer Demo
öffnen.
string Smbl[];
int CntBuy[],CntSell[];
void OnStart()
 {
    if(CountBuySell(Smbl, CntSell, CntBuy))
       for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N=0,f=0,cb=0,cs=0;
   string symbol;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         
         ot=OrderType()+1; if(ot>2)  continue;                       // пропускаем лимит ордера
         symbol=""; symbol=OrderSymbol(); if (symbol=="") continue;  // убедились что символ выбран
         f=0; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n=0; n<N; n++) if (symbol==symb[n]) f=1;               // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f==0)                                                   // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
            ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
            symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
         }
         
         if(ot==1) cb++;  // OP_BUY   для выбранного символа
         else      cs++;  // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if(N>0) return(1);   // есть открытые позиции
   return(0);           // позиций нет
}
 
evillive:

Ich versuche, einen einfachen EA zu schreiben, der alle Positionen auf meinem Konto schließt, wenn er angegebene Gewinn- oder Verlustwerte in der Einzahlungswährung erreicht (ich öffne durch mehrere Symbole), aber es schließt Positionen, sobald sie erscheinen (((

Ich verstehe nicht, was los ist:



Sehen Sie sich das an.


extern int Gewinn = 30;

extern int Magic=0;

int CurProfit;

extern bool CurSymbolOnly = false;


int start() // Sonderfunktion start

{

//Zähler des Gewinns aller Aufträge

double p1;

int i1, kk1=AuftragsSumme(), pr1=0;

for (i1=0; i1<kk1; i1++)

{

if(OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))

{

if (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT);

if (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0,0001; sonst p1=0,01;

if (Auftragsart()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

wenn (Auftragsart()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);

}

}

}

}

CurProfit=pr1;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

wenn (Gewinn<=pr1)

{

ClosePosWithMaxProfitInCurrency();

}

zurück(0);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///schließt vom teuersten zum billigsten

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)

{

double pr=0;

int i5, k=OrdersTotal(), np=-1;

if (sy=="0") sy=Symbol();

for (i5=k-1; i5>=0; i5--)

{

if (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

wenn ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==mn)

{

wenn (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap();

np=i5;

}

}

}

}

}

wenn (np>=0)

{

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);

if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);

}

}

}

}

closeotlojnie();

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//closeotlojnie

void closeotlojnie()

{

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

}

}

 
GSB:
Ich habe eine einzige Funktion für Sie ausgearbeitet, um verknüpfte Arrays von Symbolen und Anzahl der Aufträge (offene Positionen) zum Kauf und Verkauf zu erstellen. Testen Sie das Skript, indem Sie mehrere Positionen auf einer Demo


Vielen Dank für Ihre Zeit, aber es ist ein bisschen kompliziert für mich, entschuldigen Sie die Störung. Erklären Sie mir, was, wo und wie? Wie man an den Fingern ablesen kann.


Ich habe noch nie mit dieser Art von Skripten gehandelt.

 
GSB, pako, vielen Dank, ich war schon seit einiger Zeit geistesabwesend und habe solche Dinge nicht bemerkt...
 
denis77515:

Vielen Dank für Ihre Zeit, aber es ist ein bisschen kompliziert für mich, entschuldigen Sie die Störung. Erklären Sie mir, was, wo und wie? Wie man an den Fingern ablesen kann.


Ich habe es ausprobiert und manuell über ein Demokonto gehandelt.


Wie haben Sie es auf einem Demokonto getestet, wenn es nur Fehler gibt? Der vorgelegte Code konnte nicht gehandelt werden. Ich habe dem Code Kommentare hinzugefügt. Man muss die ganze Arbeit selbst machen, ohne Wissen und harte Arbeit... Sie können nicht auf Marktplätzen handeln, insbesondere nicht mit Devisen. Das Ergebnis wird unmissverständlich sein. Zusätzlich zu den oben genannten Problemen sollten Sie das von Ihnen gewählte Handelssystem nutzen. Nach 2-3 Monaten werden sich die Ergebnisse zeigen, dann werden Sie entscheiden, ob dieses System für Sie persönlich und für den Handel prinzipiell geeignet ist.
 
Vielen Dank, wir werden hart arbeiten!
 
Frage an die Moderatoren oder Administratoren: Kann ich meinen Nickname ändern? Ich habe versucht, mich bei MQL5 zu registrieren, aber es stellte sich heraus, dass mein Nickname dort bereits verwendet wurde, so dass ich mich unter einem anderen Namen registrieren musste. Ich möchte dort und hier denselben Spitznamen haben. Natürlich kann ich mich auch hier neu registrieren, aber ich habe angefangen, etwas in Code Base zu posten und möchte die Urheberschaft meiner Werke (und Beiträge) behalten, indem ich einfach meinen Namen ändere". Ist das möglich?
 
Spy:
Frage an die Moderatoren oder Administratoren: Kann ich meinen Nickname ändern? Ich habe versucht, mich bei MQL5 zu registrieren, aber es stellte sich heraus, dass mein Nickname dort bereits verwendet wurde, so dass ich mich unter einem anderen Namen registrieren musste. Ich möchte dort und hier denselben Spitznamen haben. Natürlich kann ich mich auch hier neu registrieren, aber ich habe angefangen, etwas in Code Base zu posten und möchte die Urheberschaft meiner Werke (und Beiträge) behalten, indem ich einfach meinen Namen ändere". Ist das möglich?

Schreiben Sie Rosha eine private Nachricht. Ich hoffe, Sie werden sie finden. Nennen Sie das Problem
 

OK, vielen Dank.

 

Hallo! Ich habe EAs auf einer früheren Version von MetaTrader und habe das Terminal aktualisiert. Danach ging ich zurück zu 509. Die EAs haben also 60 Jahre lang... Bild, kehren sie zu der Terminalversion zurück, auf der sie geschrieben wurden.

Die Frage ist: Was ist mit den EAs zu tun, die nach dem "Zurückkommen" keine Geschäfte mehr im Strategy Tester öffnen und die nicht mehr überprüft werden können (der Start-Button im Strategy Tester reagiert einfach nicht auf einen Klick)?