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

 
Sí.
 
Roger:
Sí.
:) Ahora ha aparecido el error 130. Lo más extraño es que con stops erróneos (130) sigue poniendo takei correcto (calculado por ATR), pero mis stops no estaban puestos desde el principio...
¿Hay alguna manera de entenderlo?
 
b0r1s:

¡¡¡Necesito ayuda!!! ¿Cómo elegir la última orden perdedora del historial?


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();

  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 (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}

if (isLossLastPos(NULL, -1, Magic искомого ордера)) {нашли - обрабатываем...}
 
ToLik_SRGV:

Es demasiado complicado para ti :))
Este es mi código

Pase en el método como parámetros un medjack retrasado y un trall deseable.

No entiendo por qué tu función da error 1 (curioso: error 1 = sin error, pero resultado desconocido) y no arrastra. A veces puede captar algún retraso, pero sobre todo >>>ERROR1 en el registro y no tose...

Así es como lo hago yo:

//==============================================================================================
   // Модификация ордеров
//============================================================================================== 
   int criterion = TakeProfitATR (1);                // Рассчитываем "достаточную" волатильность
   if (criterion>=15) trailingOrder(511, 20);        // и если она в "норме" - тралим ордера...
//==============================================================================================

// Функция для рассчёта Take Profit по ATR

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }
 
artmedia70:

No entiendo por qué tu función da error 1 (curioso: error 1 = sin error, pero resultado desconocido) y no arrastra. A veces puede captar algún retraso, pero sobre todo >>>ERROR1 en el registro y no tose...

Yo lo llamo así:


El error 1 puede ocurrir debido a esto (del documento OrderModify()):

Si se pasan valores no modificados como parámetros de la función, se generará el error 1 (ERR_NO_RESULT).

Así que no pasa nada, realmente no hay ningún error, puedes ignorarlo.
 
artmedia70:

No entiendo por qué tu función da error 1 (curioso: error 1 = sin error, pero resultado desconocido) y no arrastra. A veces puede captar algún retraso, pero sobre todo >>>ERROR1 en el registro y no tose...

Así es como lo hago yo:


Añadí Limit`order(en el último código me olvidé de ellos :))) + procesamiento de error #1 (antes de la modificación se compara el nuevo precio con el actual, si son iguales, entonces no se hace nada):

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 

Por cierto, he encontrado un error en el Tutorial sobre las distancias StopLevel y FreezeLevel para los colgantes:

Limitación de la distancia mínima de StopLevel.

La operación no se ejecuta si se incumple alguno de estos requisitos.

Tipo de pedido Precio de apertura de la orden (OpenPrice) StopLoss (SL) TakeProfit (TP)
Comprar
No se permite ninguna modificaciónBid-SL StopLevelTP-Bid ≥ StopLevel
Vender
No se permite ninguna modificaciónSL-Ask StopLevelAsk-TP StopLevel
BuyLimit
Ask-OpenPrice StopLevelOpenPrice-SL StopLevelTP-Precio Abierto ≥ StopLevel
SellLimit
Oferta-Precio Abierto ≥ Nivel de StopSL-PrecioAbierto ≥NivelStopOpenPrice-TP StopLevel
BuyStop
OpenPrice-Ask StopLevelOpenPrice-SL StopLevelTP-Precio Abierto StopLevel
SellStop
Oferta-Precio Abierto Nivel de StopSL-PrecioAbierto StopLevelOpenPrice-TP StopLevel

SellLimit se sitúa por encima del precio actual, por lo que es correcto:

OpenPrice - Bid ≥ StopLevel

 
¿Cómo puedo abrir dos órbitas opuestas con 50 pips de diferencia?
 

¿hay alguna forma de ordenar los instrumentos en las pestañas de la parte inferior de la pantalla? porque 8 instrumentos en 4 marcos temporales están dispersos en un lío....

 
Rossi:

¿hay alguna forma de ordenar los instrumentos en las pestañas de la parte inferior de la pantalla? porque 8 instrumentos en 4 marcos temporales están dispersos en un lío....


coge la pestaña con el nombre del gráfico y arrástrala hasta el lugar adecuado
Razón de la queja: