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

 
qué países) Por favor, escriba cuáles son las banderas. Cuáles son las claves para entrar en el buscador y averiguarlo.
 
Si te refieres a falso verdadero, no veo cómo puedes abrir sólo una orden a la vez.
 
¿Puedes decirme cómo un EA abre una parrilla de órdenes? He escrito una función que detecta el pedido con el precio más alto y el más bajo. Pero también necesito información sobre el segundo pedido con el precio más bajo o el más alto.
 
Top2n:
Si te refieres a falso verdadero, entonces no entiendo cómo es posible abrir exactamente una orden.
¿Por qué no se comprueba si ya existe una posición abierta del tipo que debería abrir la señal?
Si ya existe, no lo abras.

Si no hay ninguna posición de este tipo en el mercado, ábrala.

Junto con esta comprobación, también puede comprobar cualquier otra condición. Por ejemplo: si ya existe una posición de este tipo, pero ha pasado un tiempo determinado después de su apertura, se puede abrir otra posición... etc. etc. ...

 
DimaMA:
¿Puedes decirme cómo un EA abre una parrilla de órdenes? He escrito una función que determina el pedido con el precio más alto y el más bajo. Pero necesito más información sobre el segundo pedido con el precio más bajo o el más alto. Aquí en general el segundo y no el último. dime la función.

Recorre todos los pedidos y los almacena en una matriz bidimensional. En la primera dimensión de la matriz, registre la hora en que se realizó el pedido, y en la segunda dimensión, registre su ticket. Ordena el array por la fecha de colocación de la orden (por la primera dimensión) en orden descendente. El segundo elemento de la matriz en la primera dimensión contendrá la fecha de instalación de la penúltima orden (la segunda desde el final), y la segunda dimensión contendrá el ticket de la orden necesaria. Usted selecciona la orden por este billete y... Puedes hacer lo que quieras con él.


Una vez escribí una función para calcular el Breakeven para la cantidad N-ésima de las últimas posiciones para un EA personalizado. El cálculo debe hacerse para las últimas posiciones, empezando por la penúltima. Puedes mirar cómo se implementa y sacar algo en claro:

//+----------------------------------------------------------------------------+
// Уровень безубытка по символу для N последних позиций, начиная с предпоследней
double LevelPreWLforNpos(int op, int mn1, int mn2, int num) { 
   double lots=0;
   double sum=0;
   int n=0;
   int mass[1][2];
   ArrayInitialize(mass,0);
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()!=op)    continue;
         if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
            n++;
            if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
            mass[n-1][0]=OrderOpenTime();
            mass[n-1][1]=OrderTicket();
            }
         }
      }
   ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
   if (ArrayRange(mass,0)>num+1)  ArrayResize(mass,num+1);
   for (i=1; i<ArrayRange(mass,0); i++) {
      if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
         if (OrderCloseTime()==0) {
            if (OrderType()==OP_BUY) {
               lots+=OrderLots();
               sum+=OrderLots()*OrderOpenPrice();
               }
            if (OrderType()==OP_SELL) {
               lots-=OrderLots();
               sum-=OrderLots()*OrderOpenPrice();
               }
            }
         }
      }   
   double price=0;
   if (lots!=0) price=sum/lots;  
   return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
 
Top2n:
Si te refieres a falso verdadero, no veo cómo puedes abrir sólo una orden a la vez.


Sí. A eso me refiero. Vea el tutorial aquí. Tendrás algunas condiciones más, como escribes: "¡Pregunta de atención!) Y cómo hacer que se abra una vez para (sig1) puede ser así sig1-abrir BAY, el siguiente comando, sig0-admitir la inclusión. trall (no es importante), el siguiente comando de nuevo, sig1-abrir segundo BAY." - ¿no es un montón de veces? Parece que no lo necesita... En general, juega con las banderas.

 
Roman.:


Sí. Me refiero a ellos. Vea el tutorial aquí. Usted tendrá algunas condiciones más, como usted escribe: "Atención pregunta!) Y cómo hacer que se abra una vez para (sig1), mientras que puede ser tan sig1-abrir BAY, el siguiente comando, sig0-admitir en. arrastre (no importa), el siguiente comando de nuevo, sig1-abrir segundo BAY" - no es muchas veces? Parece que no lo necesita... En general, juega con las banderas.

¿Tiene Kimi una función adecuada, por casualidad? Para no saturar el programa. Es necesario que abra la orden y se calme, pero "mil" en un segundo.
 
Top2n:
¿Tiene Kim I.V. una función adecuada? Para no saturar el programa. Quiero que abra un pedido y se relaje, porque "abre mil" en un segundo.
Elige.
 

Quiero escribir los resultados de las pruebas (transacciones) en un archivo después de las pruebas

Puse la función tofile () en el bloque deinit() (escribe después de terminar el trabajo)

pero la propia función

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
no funciona, sólo registra la cabecera
 
Entonces, ¿puede decirme qué función devuelve el precio actual?