Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 710

 
sponger:
Puedes hacer esto: Km=MathMax(i/r,Punto); // con la división, ¡y no será cero!
 
borilunad:
Puedes hacer esto: Km=MathMax(i/r,Punto); // con la división, ¡y no será cero!

¡¡¡Wow!!! ¡Cabeza! ¡¡¡Muchas gracias!!! Después de un trabajo extremadamente tedioso de cuatro horas, finalmente encontré cómo pegar esta función para que el probador no jurara) salió lo siguiente.

double a=iLowest(Symbol(),PERIOD_M1,MODE_LOW,m1,0); //devuelve el índice de la barra para n-períodos con el precio mínimo

double b=iHighest(Symbol(),PERIOD_M1,MODE_HIGH,m1,0); //devuelve el índice de la barra para n-períodos con el precio máximo

double MinLOWPeriod=iLow(Symbol(),PERIOD_M1,a); //devuelve el valor del precio de la barra con el precio más bajo

double MaxHIGHPeriod=iHigh(Symbol(),PERIOD_M1,b); //devuelve el precio de la barra con el precio más alto

double PriceCloseBar=iClose(Symbol(),PERIOD_M1,0); //devuelve el precio de cierre de la última barra

double xm1=(PriceCloseBar-MinLOWPeriod)/(MathMax((MaxHIGHPeriod-MinLOWPeriod)/100,Point));

Print(xm1);

y también hizo la fórmula más suave;)

Gracias.

 
Жалко, кнопочки "Спасибо" нету(
 

sponger:

Esuna pena que no haya un botón de "Gracias".

Pero hay otro botón mágico: el SRC, cuando lo usas, el código (o fragmentos del mismo) quedan más ordenados y legibles en el post del preguntante, añadiendo un plus al karma del autor de la pregunta y aumentando el número de los que mirarán ese código y decidirán ayudarle.

Sólo shhhh. . Así que en el conocimiento secreto de la magia del botón SRC se dedican, en general, sólo los que leen los textos sagrados de los manuales en el sitio. Por ejemplo, como estos.

¡Y éxito para ti aquí en el dominio del conocimiento secreto en la resolución de más preguntas!
 
sponger:

¡¡¡Wow!!! ¡Cabeza! ¡¡¡Muchas gracias!!! Después de un trabajo extremadamente tedioso de cuatro horas finalmente encontré cómo pegar esta función para que el probador no jurara) salió aproximadamente lo siguiente.

double xm1=(PriceCloseBar-MinLOWPeriod)/(MathMax((MaxHIGHPeriod-MinLOWPeriod)/100,Point));

Print(xm1);

y también hizo la fórmula más suave;)

Gracias.

De nada. Y estoy 100% de acuerdo conDiPach. Buena suerte.
 
void ChagingLots(int Magic,double percent,double lot)
{ 
  double t=2,             //коэффициент при делении,для того чтобы узнать цену закрытия
         PriceCl,         //цена закрытия части ордера
         takeprofit;      //нужна для вычислений
  int count = 0,order;
  for(int i=OrdersTotal()-1;i>=0;i--)    //пробегаемся по массиву ордеров
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
          {
            if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
              {
                 if(OrderType()== OP_BUY)        //если ордер на покупку
                 {
                 takeprofit = OrderTakeProfit();   //вычисляем тейк ордера
                 PriceCl    = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits);  //примерную цену закрытия
                 order = OrderTicket();    //получили ордер
                 if(Bid>PriceCl) //если текущая цена оказалась выше нашей цены ,то закрываем часть ордера
                 {OrderClose(order,NormalizeDouble(lot*percent/100,2),PriceCl,3);} 
                 }
                 if( OrderType()== OP_SELL )// для продажи аналогично
                 {
                   takeprofit = OrderTakeProfit();
                   PriceCl    = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits);
                   order = OrderTicket();
                   if(Bid<PriceCl)
                   {OrderClose(order,NormalizeDouble(lot*percent/100,2),Bid,3);}
                 }
              }
          }
     }
     
}

Hola a todos)

He intentado escribir una función para cerrar una parte de la posición, pero cuando la ejecuto en el probador, el 138 da error, no entiendo cual es el problema, ayuda por favor.

Aquí hay un Asesor Experto en el que esta función debería funcionar)

Archivos adjuntos:
zigzagx.mq4  16 kb
 
LBatters:

Hola a todos)

He intentado escribir una función para cerrar una parte de la posición, pero cuando la ejecuto en el probador, el 138 da error, no entiendo cual es el problema, ayuda por favor.

Tengo un EA donde esta función debería funcionar).

¿Has mirado en el Dock lo que significa este error? ¡A partir de ahí encontrarás la respuesta!

¿A qué precio se cierra la compra? ¿Y la venta?

 

Saludos a todos
Mi pregunta está más relacionada con los desarrolladores de metacomillas, pero no obstante...


Сколько баров храниться история? Т.е. с каким максимальным по сдвигу баром можно работать?

Código:

Print(iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,1200));

Print(iClose(Symbol(),0,1200));

Cuando se comprueba este desplazamiento, el terminal da como resultado 0,0 para 2 casos

Pero

Print(iMA(Symbol(),0,14,0,MODE_SMA,PRICE_CLOSE,120));

Print(iClose(Symbol(),0,120)); 

En la prueba todo funciona

¿Es posible ajustar de alguna manera el tamaño del historial disponible? ¿Quizás alguien se ha enfrentado a un problema así y ya se ha encontrado una solución?
Gracias de antemano.

 

Hola a todos.

Estoy tratando de actualizar un simple EA de arrastre por Kim para eliminar las órdenes pendientes después de cerrar todas las órdenes de mercado, falla(

He añadido la función de eliminar los pedidos pendientes:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Удаление ордеров                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int  err, i, it, k=OrdersTotal(), ot;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(SoundSuccess); break;
              } else {
                err=GetLastError();
                if (UseSound) PlaySound(SoundError);
                Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}

He encontrado otro problema que no puedo resolver porque no soy demasiado bueno en la codificación.

Supongo que debería escribir una condición como:

Esto es sólo un ejemplo de otro EA.

   if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit) 
     {
      ClosePosFirstProfit();
      if(DeleteOrders) DeleteOrders();
     }


Por favor, ayúdenme.

Archivos adjuntos:
tral.mq4  19 kb
 
Señores conocedores de MQL-4, ¿cómo puede el código MQ4 descargar y cargar de nuevo un indicador?
Razón de la queja: