[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 934

 

El problema. Por favor, avisa.

En OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

La función OrderProfit() devuelve el primer beneficio de la lista del historial,

¿cómo puedo hacer que me devuelva el último beneficio de la lista del historial?

Lo intenté de esta manera:

A=OrdersHistoriTotal();

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit() no devuelve nada)

)) pero no funciona

 

Profesionales, por favor, aconsejen cómo arreglar el script. Utilizo un script para exportar los datos

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

Obtengo 5 archivos con datos en la salida. Quiero obtener un archivo que contenga los datos del primer instrumento, luego los del segundo, etc. No puedo ponerlo todo en un archivo... Gracias.

 
kon12:

Profesionales, por favor, aconsejen cómo arreglar el script. Utilizo un script para exportar los datos

Obtengo 5 archivos con datos en la salida. Quiero obtener un archivo que contenga los datos del primer instrumento, luego los del segundo, etc. No puedo ponerlo todo en un archivo... Gracias.


Utilizar la apertura de archivos para leer y escribir, desplazarse al final del archivo y añadir

FileOpen(fname,FILE_WRITE|FILE_READ);

FileSeek()

ayudarte

 
gheka:

El problema. Por favor, avisa.

En OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)

La función OrderProfit() devuelve el primer beneficio de la lista del historial,

¿cómo puedo hacer que me devuelva el último beneficio de la lista del historial?

Lo intenté de esta manera:

A=OrdersHistoriTotal();

OrderSelect(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit() no devuelve nada)

)) pero no funciona


Así que la última orden aún no se ha encontrado. Y que es el último. Por la hora de apertura o cierre. Y, por supuesto, no olvides qué instrumento buscar.
 
aconsejar qué escribir en un EA para un límite duro el volumen máximo de la transacción? acaba de decidir qué volumen para abrir, pero a veces se abre un gran volumen y luego ir a la quiebra, tengo que limitar el máximo 0.5
 
ilmur:
aconsejar qué escribir en un EA para un límite duro el volumen máximo de la transacción? acaba de decidir qué volumen para abrir, pero a veces se abre un gran volumen y luego ir a la quiebra, tengo que limitar el máximo 0.5
extern double MyMaxVolume=0.5;

...

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

Si el hombre lo supiera, lo habría hecho él mismo. Pero aquí parece que hay que hacer cambios en el código de otra persona
 

Gracias

 
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 que abre una posición cuando el OsMA cruza la línea cero. No está claro dónde se abre y no está claro por qué. ¿Ver si iOsMA(NULL,0,13,34,8,0,0) tiene un error?
 
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);
}

No funciona, quizás tenga que cambiar algo aquí o ponerlo después del inicio.

He intentado traducir tu código en papel al ruso que entiendo, pero no funciona,

es demasiado complicado, especialmente cuando las condiciones de cada condición se suceden, y una condición de las ocho condiciones.

Por supuesto que no discuto que quien creó este código sea un milagro, pero para mí es una completa perversión (en el buen sentido)

No me da pereza añadir comentarios a cada operación y condición, excepto a la función estándar.

Razón de la queja: