[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 175

 

Buenas tardes, ¿podría decirme si existe un código


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер
if (OrderType()==OP_BUY||OP_SELL)
 {
 if (OrderMagicNumber()==1)
  {
  if (OrderProfit()<0)

   {

que seleccionará la última orden del historial con un beneficio negativo.

Si hay una situación en la que se cierran 3 órdenes al mismo tiempo, ¿cómo sé que las últimas 3 órdenes se han cerrado al mismo tiempo?

He intentado hacer el bucle for, pero encuentra todas las órdenes cerradas con pérdidas, mientras que yo necesito sólo la última orden o el último orden dependiendo de cuántos de ellos cerraron a la vez

 
BruDer:

No he encontrado una respuesta en la búsqueda

¿cómo puedo ver desde el script qué indicadores están en el gráfico, qué parámetros e indicadores, en qué subventanas se encuentran?

gracias


De ninguna manera.
 

vik-777:

¿cómo sé que los 3 últimos cerraron al mismo tiempo?

OrderCloseTime()
 
vik-777:

Buenas tardes, ¿podría decirme si existe un código


que seleccionará la última orden del historial con un beneficio negativo.

Si hay una situación en la que se cierran 3 órdenes al mismo tiempo, ¿cómo sé que las últimas 3 órdenes se han cerrado al mismo tiempo?

Intenté hacer el bucle for, pero encuentra todas las órdenes cerradas con pérdidas, mientras que yo necesito sólo la última orden o el último orden dependiendo de cuántos de ellos cerraron a la vez




Si es la misma, entonces la comparas con la hora de cierre de tu anterior orden cerrada... así, naturalmente, está todo en un bucle - desde el último cerrado hasta el primero, vas uno tras otro y comparas el tiempo de cierre de los pedidos... Otra cosa - imprimir la hora de cierre de las últimas órdenes que conoces de antemano, digamos tres órdenes , puede ser diferente, incluso si lo entiendes como " simultáneamente", es decir, como yo lo entiendo, la orden se cierra en cualquier momento, es decir. En realidad, la hora de cierre de, digamos, tres órdenes a la vez no puede ser la misma - intente imprimir () y vea los valores de sus tres órdenes TIME - sus valores de las características de OrderCloseTime(), es decir, puede que tengamos que introducir el concepto de TIEMPO de cierre, es decir, la desviación de la hora de cierre de varias órdenes por algún pequeño valor cuando podemos considerar que han cerrado simultáneamente. Experimenten y véanlo ustedes mismos desde aquí.
 

Tomando la ayuda de la sala.

Cómo escribir una condición en OrderSelect():

if(order opening day != today's day)ticket=OrderTicket();

 
if(TimeDay(OrderOpenTime())!=TimeDay(CurrentTime()))ticket=OrderTicket();
 
ikatsko:

¿CÓMO SE CUENTA EL NÚMERO DE POSICIONES LARGAS RENTABLES Y EL NÚMERO DE POSICIONES CORTAS RENTABLES POR SEPARADO?

La estrategia es la siguiente: si el número de posiciones largas rentables desde el inicio del Asesor Experto (o mejor - para toda la historia de la cuenta) es mayor que el número de posiciones cortas, entonces sólo se debe permitir la apertura de posiciones largas. Y viceversa.

Está claro cómo contar estas operaciones, si son cerradas por el Asesor Experto: Cerrar - Contar. Pero si una posición se cierra por TP o SL, entonces ... ?

¿Tal vez alguien tiene un código listo de la función?

Pues bien, compara en un bucle sobre las posiciones cerradas su precio de cierre y sus precios de toma y parada:

OrderTakeProfit(); OrderStopLoss(); OrderClosePrice();

Y es aún más fácil seleccionar OP_BUY y OP_SELL y escribir en cuatro variables separadas el número de posiciones perdedoras y rentables de Compra y Venta

if (OrderProfit()+OrderSwap()+OrderCommission()>0) { /* la posición es rentable */ }
else { /* la posición es perdedora */ }

 
Gracias.
 

He mirado todo..., he hecho todo... No abrirá una posición, ¡eso es todo! Se cierra correctamente, pero no se abre... ¡No sé qué hacer! ¿Tal vez alguien encuentre un error en el programa?

 
//+------------------------------------------------------------------+
//|                                                     DOKTRADE.mq4 |
//|                                                DOKSTER@YANDEX.RU |
//|                                                DOKSTER@YANDEX.RU |
//+------------------------------------------------------------------+
#property copyright "DOKSTER@YANDEX.RU"
#property link      "DOKSTER@YANDEX.RU"

   extern double LOT = 0.01;   // LOTS
   extern double KOF = 2;
   extern double SAF = 5;
   extern int    FRC = 144;
   extern double STL = 100;
   extern double TPF = 100;
   
   int start()
     
    { 


int CNT;

int DIG;

int TOTAL;
int SPREAD;

double SPR;
double SPRW;

double FRCU;
double FRCD;

double EMAH;
double EMAM;
double EMAL;

double OPEN;
double CLOSE;

double DFB;
double DFS;

double STLW = STL*Point;
double TPFW = TPF*Point;

double SAFW = SAF*Point;

EMAH = iMA(NULL,0,34,8,MODE_SMA,PRICE_HIGH,1);
EMAM = iMA(NULL,0,34,8,MODE_SMA,PRICE_MEDIAN,1);
EMAL = iMA(NULL,0,34,8,MODE_SMA,PRICE_LOW,1);

OPEN = iOpen(NULL,0,1);
CLOSE = iClose(NULL,0,1);

FRCU = High[iHighest(NULL,0,MODE_HIGH,FRC,1)];
FRCD = Low[iLowest(NULL,0,MODE_LOW,FRC,1)];

DFB = (CLOSE-FRCD);
DFS = (FRCU-CLOSE);

SPR = MarketInfo(Symbol(),MODE_SPREAD);
SPRW = (SPR*Point);

DIG = MarketInfo(Symbol(),MODE_DIGITS);

TOTAL = OrdersTotal();


if(TOTAL<1)

 { if (OPEN<EMAH&&CLOSE>EMAH)
   
   OrderSend(Symbol(),OP_BUY,LOT,Ask,3,0,0,"DOKTRADE",15775,0,Green);
  
 
   if (OPEN>EMAL&&CLOSE<EMAL)
 
   OrderSend(Symbol(),OP_SELL,LOT,Bid,3,0,0,"DOKTRADE",15885,0,Red);
  
  return(0);
 
    }
    
           
      
  for(CNT=0;CNT<TOTAL;CNT++)    
  
  {
      
  OrderSelect(CNT,SELECT_BY_POS,MODE_TRADES);
  
  {
  
  if (OrderType()==OP_BUY && OrderSymbol()==Symbol())   
                                             
      {
      
       if (OPEN>EMAL&&CLOSE<EMAL)    
     
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
        
         if (OPEN>EMAM&&CLOSE>EMAM)
          
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCD-SAFW,CLOSE+DFB,Green);
        
        return(0);
        
        }
        
  if (OrderType()==OP_SELL && OrderSymbol()==Symbol())
        
      {
       
         if (OPEN<EMAH&&CLOSE>EMAH)
         
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
         
          if (OPEN<EMAM&&CLOSE<EMAM)
           
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCU+(SAFW+SPRW),CLOSE-DFS,Red);
       
         return(0);
         
         }
          }
           }
            }
Razón de la queja: