[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 934

 

Problème. Veuillez me conseiller.

Dans OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

La fonction OrderProfit() renvoie le premier bénéfice de la liste historique,

comment puis-je faire en sorte qu'il renvoie le dernier bénéfice dans la liste historique ?

J'ai essayé de cette façon :

A=OrdersHistoriTotal() ;

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY) ;

OrderProfit() ne renvoie rien du tout)

)) mais cela ne fonctionne pas

 

Professionnels, veuillez indiquer comment corriger le script. J'utilise un script pour exporter les données

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);

J'obtiens 5 fichiers avec des données dans la sortie. Je veux obtenir 1 fichier, qui contiendra les données sur le premier instrument, puis sur le second, etc. Je n'arrive pas à tout mettre dans un seul fichier... Merci.

 
kon12:

Professionnels, veuillez indiquer comment corriger le script. J'utilise un script pour exporter les données

J'obtiens 5 fichiers avec des données dans la sortie. Je veux obtenir 1 fichier, qui contiendra les données du premier instrument, puis du second, etc. Je n'arrive pas à tout mettre dans un seul fichier... Merci.


Utiliser l'ouverture de fichier pour lire et écrire, se déplacer à la fin du fichier et ajouter

FileOpen(fname,FILE_WRITE|FILE_READ) ;

FileSeek()

vous aider

 
gheka:

Problème. Veuillez me conseiller.

Dans OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

La fonction OrderProfit() renvoie le premier bénéfice de la liste historique,

comment puis-je faire en sorte qu'il renvoie le dernier bénéfice dans la liste historique ?

J'ai essayé de cette façon :

A=OrdersHistoriTotal() ;

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY) ;

OrderProfit() ne renvoie rien du tout)

)) mais cela ne fonctionne pas


Le dernier mandat n'a donc pas encore été trouvé. Et qui est le dernier. Par l'heure d'ouverture ou de fermeture. Et, bien sûr, n'oubliez pas l'instrument à rechercher.
 
conseiller ce qu'il faut écrire dans un EA pour une limite dure le volume maximum de la transaction ? il décide juste quel volume à ouvrir, mais parfois ouvre un grand volume et puis se cassent, j'ai besoin de limiter le maximum 0,5
 
ilmur:
conseiller quoi écrire dans un EA pour une limite dure le volume maximum de la transaction ? il décide juste quel volume à ouvrir, mais parfois ouvre un grand volume et puis se cassent, j'ai besoin de limiter le maximum 0.5
extern double MyMaxVolume=0.5;

...

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

Si une personne le savait, elle l'aurait fait elle-même. Mais ici, il semble que vous deviez apporter des modifications au code de quelqu'un d'autre.
 

Merci.

 
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];}
}


Un EA qui ouvre une position lorsque l'OsMA franchit la ligne zéro. On ne sait pas où elle s'ouvre et on ne sait pas pourquoi. Voir si iOsMA(NULL,0,13,34,8,0,0) a une erreur ?
 
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);
}

Ça ne marche pas, peut-être que je dois changer quelque chose ici ou le mettre après le début.

J'ai essayé de traduire votre code sur papier en russe que je comprends, mais ça ne marche pas,

c'est trop compliqué, surtout quand les conditions de chaque condition se suivent, et une condition sur huit.

Bien sûr, je ne dis pas que celui qui a créé ce code est un miracle, mais pour moi, c'est une perversion complète (dans le bon sens du terme).

Je n'ai pas la flemme d'ajouter des commentaires à chaque opération et condition, sauf pour la fonction standard.

Raison: