[¡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 284

 
 
waitra >> :

int NúmeroDePos_HISTORIA

Lo he probado, sólo cuenta el número de posiciones actuales abiertas, no cuenta el historial, devuelve el valor a cero al cerrar la orden, ¿quizás haya que cambiar algo más?

Aquí lo he hecho. Tomé otra función de I.Kim y la cambié un poco.

Funciona como un reloj:

La función START puede utilizarse para el control.

Comment ("ордера на истории= ",NumberOfPos_HISTORY_2(NULL,-1,Magic));

Y aquí está la función propiamente dicha:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз из  истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY_2 (string sy="", int op=-1, int mn=-1) {
     int      i, k=OrdersHistoryTotal(), kp=0;
  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 (OrderProfit()<0 || OrderProfit()>=0) kp++;           
            }  } } } }  }  return( kp);}


 

¡¡¡Hola a todos!!!

//+------------------------------------------------------------------+
//|                                                   SimpleMA22.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//---- input parameters
extern int       MAFP=21;
extern int       MASP=55;
extern double    Lots=0.1;
extern int       StopLoss=60;
extern int       TakeProfit=30;
extern int       MagicNumber=123456;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
   
bool CheckOrders(int Type)
{
 bool Result= True;
 for(int i=0; i<OrdersTotal(); i++)
  if(OrderSelect( i, SELECT_BY_POS))
   if(OrderMagicNumber()== MagicNumber && OrderSymbol() == Symbol())
      if(OrderType()== Type)
        {
         if( Type==OP_BUY)
           if(!OrderClose(OrderTicket(),OrderLots(),Bid,0))
             Result= False;
         if( Type==OP_SELL)
           if(!OrderClose(OrderTicket(),OrderLots(),Ask,0))
             Result= False;
         } 
        else Result= False;
 return( Result); 
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo(Symbol(), MODE_SPREAD);
    int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0);
    double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1);
    double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0);
    double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1);
    
    // открытие позиции Buy покупка
    if( MAF_1 < MAS_1 && MAF_0 > MAS_0)
     if( CheckOrders(OP_SELL))
      {
       if( StopLoss <= StopLevel+ Spread)
         double SL = 0;
        else
         SL = Ask - StopLoss*Point;
       if( TakeProfit <= StopLevel- Spread)
         double TP = 0;
        else
         TP = Ask + TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
    
    // Открытие позиции Sell продажа  
    if( MAF_1 > MAS_1 && MAF_0 < MAS_0)
     if( CheckOrders(OP_BUY))
      {
       if( StopLoss <= StopLevel+ Spread)
         SL = 0;
        else
         SL = Bid + StopLoss*Point;
       if( TakeProfit <= StopLevel- Spread)
         TP = 0;
        else
         TP = Bid - TakeProfit*Point;
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }//+------------------------------------------------------------------+


Cerebros al vapor, al vapor y apagados.....

Probablemente sea más fácil pensar en cómo hacer que los borrachos caven una zanja u organizar la recogida de basuras por parte de los vagabundos que ..........

En este hilo, en algún momento del comienzo, se planteó un problema similar al mío. Leer, leer.... Sigo sin entenderlo, y la conversación era sobre banderas...

La idea es sencilla. SimpleMA, pero está un poco modificado, pero no importa.

¿De quién es la fi que debe añadirse si un EA (para comprar) comprara, una orden se activara por TP y la siguiente orden se pusiera en condición de venta, es decir, cruce de MACC para vender?

Independientemente de si existe una condición adicional o no.

 

Quizás la función https://www.mql5.com/ru/forum/107476/page21 pueda ayudar.

Función isCloseLastPosByTake().
Esta función devuelve una bandera para cerrar la última posición por Take.

Bandera arriba - Verdadero - Se activó el TakeProfit.

Bandera bajada - Falso - la posición se cerró debido a otra razón.


La función propiamente dicha debe colocarse al final del código. Añade a la condición de venta:

if( isCloseLastPosByTake( NULL, OP_BUY, MagicNumber) ==true) {//продаем



 
xmurik писал(а) >>
En el par EUR/USD.
//+------------------------------------------------------------------+
//|                                                       скрипт.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int kolvo_barov = 1000;
   double start_price = iOpen(Symbol(),0, kolvo_barov);
   int handle;
   handle=FileOpen("my_data.csv", FILE_WRITE|FILE_CSV, '\t');
   if( handle>0) {
      while( kolvo_barov>1) {
         if (iHigh(Symbol(),0, kolvo_barov)> start_price + 0.01) {
            FileWrite( handle,"+100");
            start_price = start_price + 0.01;
         }      
         if (iHigh(Symbol(),0, kolvo_barov)< start_price + 0.01) {
            FileWrite( handle,"-100");
            start_price = start_price - 0.01;
         }      kolvo_barov--;
      }
      FileClose( handle);
   }
   return(0);
}
//+------------------------------------------------------------------+
Compruébalo. Sólo que no lo he comprobado. Puede haber errores.
 

Buena gente. No entiendo (véase la imagen) por qué Momentum no es Momentum :).


Impulso

¿Puede explicar por qué está por encima de cero?
 
rid писал(а) >>

Esto es lo que he hecho. Tomé otra función de I. Kim y la cambié un poco.

Funciona como un reloj:

Se puede poner la función START para el control.


Y aquí está la función propiamente dicha:

Sí, funciona. ¡Muchas gracias ! Gracias. >> Buena suerte.

 
warlock писал(а) >>

Ayuda!!! el experto se supone que debe abrir operaciones en la apertura de una nueva vela, pero además de abrir al principio de la vela, abre las "izquierdas" caóticamente...

Además, después de asignar el Máximo y el Mínimo, dejó de comprar... pero sólo vende...

Y no podemos mirar con atención lo que contiene OrderSend(). Uno falla por error, el otro falla.

if ( AllowBUY) 
   tick=OrderSend(Symbol(),OP_SELLSTOP, Lot, price1,3,( price1- SL*Point)* loss,( price1- TP*Point)* profit,"scriptSELLstop",CLR_NONE, expiration);
if ( AllowSELL) 
   tick=OrderSend(Symbol(),OP_SELLSTOP, Lot, price2,3,( price2+ SL*Point)* loss,( price2- TP*Point)* profit,"scriptSELLstop",CLR_NONE, expiration);
 
warlock >> :

Ayuda!!! el experto se supone que abre las operaciones en la apertura de una nueva vela, pero además de abrir al principio de la vela, también abre las "izquierdas" de forma caótica...

Además, después de asignar el Máximo y el Mínimo, dejó de comprar... sólo de vender...

Gracias... se sentó durante una hora... No podía entender lo que estaba pasando... A veces necesitas que alguien te abra los ojos a los errores...

 
Hola gente, ¿alguien puede ayudar a escribir un asesor de indicadores de CA?