Cierre de posiciones. Señal indicadora de encendido. - página 8

 
Lukyanov:

Beneficio neto 6157.73


Sergey, un beneficio de 6.000 dólares en 6.000 a 9.000 transacciones.

1. ¿Qué es el Ministerio de Justicia?

2. 1.500 operaciones al día: ¿qué corredor puede soportar eso?

 

Buenas noches a todos. Ha habido otro problema. Por favor, dime si sabes cómo escribir la expresión

hann = iCustom(.... .... ) para el indicador

Al menos en su forma más básica - para establecer el parámetro Lb y el número de barra...

/+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
//----
#property indicator_buffers 1
#property indicator_color1 Blue
extern int Lb=10;
double ssl[],Hld,Hlv;
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ssl);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {   return(0);  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   for(int i=Bars-Lb;i>=0;i--)     {
      if(Close[i]>iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1))
         Hld=1;
      else        {
         if(Close[i]<iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1))
            Hld=-1;
         else
            Hld=0;
        }
      if(Hld!=0)
         Hlv=Hld;
      if(Hlv==-1)
         ssl[i]=iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1);
      else
         ssl[i]=iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Aquí está el gráfico -
 
rid:

Buenas noches a todos. Ha habido otro problema. Por favor, ayuda, que puede - escribir una expresión

hann = iCustom(.... .... ) para el indicador

iCustom( Symbol(), Period(), "SSL", indLb, 0, bar );
 

Gracias, komposter.

 

Buenas tardes. Por favor, avisa.

Hay un indicador Force-index instalado en mt4. Es bipolar, con una línea media en t.0.

Este es su código.

#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int ExtForcePeriod=13;
extern int ExtForceMAMethod=0;
extern int ExtForceAppliedPrice=0;
//---- buffers
double ExtForceBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string sShortName;
   SetIndexBuffer(0, ExtForceBuffer);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//---- name for DataWindow and indicator subwindow label
   sShortName="Force("+ ExtForcePeriod+")";
   IndicatorShortName( sShortName);
   SetIndexLabel(0, sShortName);
//---- first values aren't drawn
   SetIndexDrawBegin(0, ExtForcePeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Force Index indicator                                            |
//+------------------------------------------------------------------+
int start()
  {
   int nLimit;
   int nCountedBars=IndicatorCounted();
//---- insufficient data
   if(Bars<= ExtForcePeriod) return(0);
//---- last counted bar will be recounted
   if( nCountedBars> ExtForcePeriod) nCountedBars--;
   nLimit=Bars- nCountedBars;
//---- Force Index counted
   for(int i=0; i< nLimit; i++)
      ExtForceBuffer[ i]=Volume[ i]*
(iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i)-
iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i+1));
//---- done
   return(0);
  }


Sin embargo. Mi tarea es dibujar el indicador en su totalidad en zona positiva (o negativa, no importa).

Para hacerlo de forma programada.

Es decir, no como esto: doble fuerza=(iFuerza+10), sino programáticamente.

Por favor, avise a quien sepa qué añadir (insertar) en el código para este fin.

 
rid >> :

Sin embargo. Necesito que todo el indicador se dibuje en la zona de más (o menos, lo que sea).

Por favor, díganme, quién sabe, qué debo añadir al código para esto?

En mi opinión, la envoltura sigmoidea es lo que necesitas. El buffer tendrá valores de 0 a 1.

for(int i=0; i< nLimit; i++)
      ExtForceBuffer[ i]=Volume[ i]*
(iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i)-
iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i+1));

//заменяем на 

for(int i=0; i< nLimit; i++)
{
         ExtForceBuffer[ i]=Volume[ i]*
   (iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i)-
   iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i+1));

   ExtForceBuffer[ i] = Sigmoid( ExtForceBuffer[ i]);
}

//...

double Sigmoid(double x)
{
   double value = MathExp( x);
   return ( value/(1 + value))
}
 

¡Gracias, TheXpert! Lo intentaré.

//gzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.

¡Funcionó!

 

Buenas tardes a todos. Quiero hacer mi primer EA, pero no sé cómo escribir el código. Las operaciones se abren en la MA. Si el precio toca la MA desde arriba, entonces compra. Si toca por debajo, entonces es una venta. Hay que tener en cuenta la pendiente de la MA. La pendiente de las MAs y la apertura de la orden deben ser unidireccionales. Gracias.

 
Shu писал(а) >>

la investigación es fascinante! incluso es buena para el cerebro y para la experimentación. la acojo y la respeto.

Todas las bicicletas y motos ya han sido (tachadas) inventadas antes que nosotros - pon todas las órdenes en tu propia matriz (quizás más de una) y haz las manipulaciones que quieras con ella. ordenarlo por cualquier criterio, o borrarlo (el ticket es tu amigo), o modificarlo (es fácil hacer modificaciones de stoplosses/takeprofits, o crear nuevas órdenes.

ps (una cosa más). si decides tomarte en serio tu creación, recuerda que en cualquier segundo (milisegundo) la conexión con tu empresa de corretaje puede desconectarse. La solución ideal es permitir que el Asesor Experto vea la necesidad de cerrar ciertas órdenes (en este caso) después de una parada/cierre de emergencia y las cierre.

Sin embargo, la mayoría de los "griales" vendidos públicamente en forma de P.C. - son igualmente de juguete...

Lo de las matrices no lo entiendo muy bien. Pero la segunda idea - que si el experto pierde la señal de cierre, todavía será capaz de captar la necesidad de cerrar, me gusta. Pero cómo hacerlo...

 

Por la tarde.

EA pone órdenes limitadas por límite siguiendo el movimiento del precio a distancia =Distancia.

Necesito eliminar las órdenes excesivas (más lejanas) a medida que el precio se mueve hacia arriba.

Lo he hecho. Pero por alguna razón, ¡funciona muy mal! La primera orden se elimina normalmente. Entonces, por el contrario, ¡se borran los más cercanos al precio! Luego se detienen o se borran "de la nada", y el registro genera el error 4108 (ticket desconocido). Luego, durante un tiempo, se borran normalmente.

Creo que se dijo en algún sitio que es importante ordenar correctamente la búsqueda de pedidos.

//жжжжж Удаление лишних байлим ордеров жжжжжжжжж
if( NumberOfOrders(NULL,OP_BUYLIMIT, MAGIC)> КоличествоОрдеров  )  {
    //если ордеров больше заданного значения 
//for (int z = OrdersTotal() - 1; z >= 0; z -- )  {//перебираем с "конца"
  for ( int z=0;    z<OrdersTotal();        z++)  {//перебираем с начала         
  if (OrderSelect( z, SELECT_BY_TICKET, MODE_TRADES))          {//перебираем по тикету           
   if (OrderSymbol()==Symbol()&& OrderType() == OP_BUYLIMIT) {//выбираем байлимиты   
     if ( OrderOpenPrice() <(Ask-( КоличествоОрдеров* Дистанция)*Point) ) {
     //если расстояние от тек. цены больше заданного
   
   OrderDelete(OrderTicket(),Yellow);   //  return(0);    //удаляем самый дальний
            }}}}} 

Sin embargo. Independientemente de si la recuperación de la orden se ejecuta "desde el final" o desde el principio. El resultado es incorrecto.

¡El código parece ser el más simple!

¿Qué puede estar mal aquí? Por favor, aconséjeme.