[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 934

 

Problem. Bitte beraten Sie mich.

In OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

Die Funktion OrderProfit() gibt den ersten Gewinn in der Historienliste zurück,

Wie kann ich erreichen, dass der letzte Gewinn in der Historienliste angezeigt wird?

Ich habe es auf diese Weise versucht:

A=AuftragshistorieGesamt();

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit() gibt überhaupt nichts zurück)

)), aber es funktioniert nicht

 

Fachleute, bitte beraten Sie, wie Sie das Skript reparieren können. Ich verwende ein Skript zum Exportieren von Daten

int start()
  {
  out_hist("EURUSD",1440);
  out_hist("GBPUSD",1440);
  out_hist("USDJPY",1440);
  out_hist("USDCAD",1440);
  out_hist("AUDUSD",1440);
//

  
  return(0);
  }
//  
int out_hist(string ccy, int tf)
{
  string fname = ccy + tf + ".txt";
  int handle = FileOpen(fname, FILE_CSV|FILE_WRITE, ",");
  if(handle>0)
    {
     FileWrite(handle,"<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>");    // header
     for(int i=iBars(ccy,tf)-1; i>=0; i--)
       {
       string P =ccy + tf;
       string date1 = TimeToStr(iTime(ccy,tf,i),TIME_DATE);
       date1 = StringSubstr(date1,0,4) + StringSubstr(date1,5,2) + StringSubstr(date1,8,2);
       string time1 = TimeToStr(iTime(ccy,tf,i),TIME_MINUTES);
       FileWrite(handle, P, date1, time1, iOpen(ccy,tf,i), iHigh(ccy,tf,i), iLow(ccy,tf,i), iClose(ccy,tf,i), iVolume(ccy,tf,i));
       }
     FileClose(handle);
     }
//----
   return(0);

Die Ausgabe sind 5 Dateien mit Daten. Ich möchte eine Datei erhalten, die Daten für das erste Instrument enthält, dann für das zweite usw. Ich kann nicht alles in eine Datei packen... Danke.

 
kon12:

Fachleute, bitte beraten Sie, wie Sie das Skript reparieren können. Ich verwende ein Skript zum Exportieren von Daten

Ich erhalte 5 Dateien mit Daten in der Ausgabe. Ich möchte eine Datei erhalten, die Daten für das erste Instrument enthält, dann für das zweite, usw. Ich kann nicht alles in eine Datei packen... Danke.


Öffnen Sie die Datei zum Lesen und Schreiben, gehen Sie an das Ende der Datei und fügen Sie

FileOpen(fname,FILE_WRITE|FILE_READ);

FileSeek()

Ihnen helfen

 
gheka:

Problem. Bitte beraten Sie mich.

In OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

Die Funktion OrderProfit() gibt den ersten Gewinn in der Historienliste zurück,

Wie kann ich erreichen, dass der letzte Gewinn in der Historienliste angezeigt wird?

Ich habe es auf diese Weise versucht:

A=AuftragshistorieGesamt();

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit() gibt überhaupt nichts zurück)

)), aber es funktioniert nicht


Der letzte Haftbefehl muss also noch gefunden werden. Und welches ist das letzte. Nach der Öffnungs- oder Schließungszeit. Und vergessen Sie natürlich nicht, nach welchem Instrument Sie suchen müssen.
 
beraten, was in einem EA für eine harte Grenze das maximale Volumen der Transaktion zu schreiben? es entscheidet nur, welches Volumen zu öffnen, aber manchmal öffnet ein großes Volumen und dann pleite gehen, muss ich die maximale 0,5 zu begrenzen
 
ilmur:
beraten, was in einem EA für eine harte Grenze das maximale Volumen der Transaktion zu schreiben? es entscheidet nur, welches Volumen zu öffnen, aber manchmal öffnet ein großes Volumen und dann pleite gehen, muss ich die maximale 0,5 zu begrenzen
extern double MyMaxVolume=0.5;

...

if(рассчитанный_объем > MyMaxVolume) рассчитанный_объем=MyMaxVolume;
 
Necron:

Wenn jemand das wüsste, hätte er es selbst getan. Aber hier sieht es so aus, als müssten Sie Änderungen am Code eines anderen vornehmen
 

Dankeschön

 
extern double SL=20; // SL для открываемого ордера
extern double TP=20; // ТР для открываемого ордера
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;

double
M_0,
M_1;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;


// Торговые критерии

M_0=iOsMA(NULL,0,13,34,8,0,0); // 0 бар
M_1=iOsMA(NULL,0,13,34,8,0,1); // 1 бар



if (M_1<0 && M_0>0)
Opn_B=true;

if (M_1>0 && M_0<0)
Opn_S=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Bid-SL*Point,Bid+TP*Point);time=Time[1];}

if (Opn_S)
{OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Ask+SL*Point,Ask-TP*Point);time=Time[1];}
}


Ein EA , der eine Position eröffnet, wenn der OsMA die Nulllinie kreuzt. Es ist nicht klar, wo sie sich öffnet, und es ist nicht klar, warum. Prüfen, ob iOsMA(NULL,0,13,34,8,0,0) einen Fehler aufweist?
 
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}

Es funktioniert nicht, vielleicht muss ich hier etwas ändern oder es nach dem Start einfügen.

Ich habe versucht, Ihren Code auf Papier ins Russische zu übersetzen, das ich verstehe, aber es funktioniert nicht,

Es ist zu kompliziert, vor allem, wenn die Bedingungen in jeder Bedingung aufeinander folgen, und eine Bedingung von acht Bedingungen.

Natürlich bestreite ich nicht, dass derjenige, der diesen Code geschaffen hat, ein Wunder ist, aber für mich ist es eine komplette Perversion (auf eine gute Art und Weise)

Ich bin nicht zu faul, zu jeder Operation und Bedingung Kommentare hinzuzufügen, außer bei der Standardfunktion.

Grund der Beschwerde: