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

 
vegetate писал(а) >>

¿Puedes decirme cómo pasar una dimensión de un array bidimensional a una función?

Estoy confundido sobre algo.

int testarray[5][2] = {1,2,3,4,5,6,7,8,9,10};// хоть так и можно записать, но в уме нужно держать что это ТАБЛИЦА

void testfunc(int &inarray[][]){ // массив нужно передавать "как есть", но обрабатывать можно выбранную часть
string out_str="Result: "+inarray[i,0];

for (int i=1;i<5;i++){// еще нужно учитывать, что счет в массивах начинается с НУЛЯ. "первый - нулевой"
out_str += (", "+inarray[i,0]); // здесь бы использовал строковую функцию конкатенации
}
Print(out_str);
}
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
Print("Call first:");
testfunc(testarray);
Print("Call second:");
testfunc(testarray);
//----
return(0);
}
//+-----------

 

Tengo dos copias de la misma plataforma del broker. Cada uno tiene su propia cuenta de demostración y una carpeta compartida llamada expertos.

Si abro la primera, la cierro y abro la segunda, tengo que volver a introducir la contraseña en la segunda.

Cierro el segundo y abro el primero - ahora necesito contraseña para el primero. ¿Se supone que es así?

Gracias.

 
Necron писал(а) >>

high=iHigh(NULL,60,1); ¿O hay algún problema?

Todo es correcto. Pero si quieres usar múltiples marcos temporales o símbolos, tienes que hacer la lógica correspondiente en tu EA.

 
Vinin >>:

Все правильно конечно. Но если нужно использовать несколько таймфреймов или инструментов, то нужно делать соотвествующую логику в советнике.

De acuerdo, lo investigaré. Gracias.

 

Soy yo otra vez... No me regañes mucho... Tengo unas dos semanas de experiencia con los EA...

He creado mi Asesor Experto basado en fractales pero sigue mostrando el error 1 de OrderModify en mi registro durante la prueba, aunque mi alce se mueve correctamente basado en fractales. He utilizado la función FindNearFractal de Kim. El código es el siguiente:

   for( cnt=0; cnt< total; cnt++)
     {
      OrderSelect( cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           // check for trailing stop
            if( TrailFractal)
              {
               OrderModify(OrderTicket(),OrderOpenPrice(), FindNearFractal(NULL,0,MODE_LOWER),0,0,Green);
                     return(0);
                            }
           }
         else // go to short position
           {
            // check for trailing stop
            if( TrailFractal)
              {              
                     OrderModify(OrderTicket(),OrderOpenPrice(), FindNearFractal(NULL,0,MODE_UPPER),0,0,Red);
                     return(0);
               
              }
           }
        }
Y sobre las adiciones otra pregunta. El código es el siguiente:
     for(int i = 0; i < OrdersTotal(); i++)
   {
      // выбор ордера
      if(OrderSelect( i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
  }
if(OrderType() == OP_SELL)
{
//при профите >20 pips добавится или докупится ...
 if(OrderProfit()>20)//////если поставить другое условие открывает много позиций
 OrderSend(Symbol(),OP_SELL, Lots,Bid,3, sl_sell,0,"Ma+Fr",16384,0,Red);
  PeriodForSleep=((Time[0]-Time[1])-(TimeCurrent()-Time[0]))*1000; 
Sleep( PeriodForSleep);
}
if(OrderType() == OP_BUY)
{
//при профите >20 pips добавится или докупится ...
 if(OrderProfit()>20)//////если поставить другое условие открывает много позиций
 OrderSend(Symbol(),OP_BUY, Lots,Ask,3, sl_buy,0,"Ma+Fr",16384,0,Lime);
   Sleep( PeriodForSleep);
}
Si establezco una ruptura fractal (o cualquier otra señal) en lugar de OrderProfit()>20 en la condición de adición, abre muchas posiciones. He intentado añadir Sleep()-no ayuda. ¿Cuál es el problema aquí?
 

El error 1 de OrderModify suele ocurrir cuando los nuevos parámetros coinciden exactamente con los de la orden...

 
keekkenen >>:

обычно OrderModify error 1 бывает, когда новые параметры точно соответствуют тем, что в ордере..

¡Gracias, keekkenen! Los parámetros son diferentes. La respuesta se encuentra aquí. El consejo (en el hilo) es clavar este error... NormalizeDouble tampoco ayuda.

¿Y qué puede decir del segundo error (sobre las adiciones)?

 
¿Cómo saben los EAs cuánto beneficio de papel, es decir, el beneficio de las posiciones no cerradas, hay en este momento?
 
dmmikl86 писал(а) >>
¿Cómo se puede saber cuánto beneficio de papel, es decir, el beneficio de las posiciones no cerradas, está actualmente en el EA?

KimIV tiene la función GetProfitOpenPosInPoint().

 
khorosh >>:

У KimIV есть функция GetProfitOpenPosInPoint().

¿puedo hacerlo así, y funcionará?

extern double Level_Profit = 200;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double paper_money = AccountEquity()-AccountBalance();
   if ( paper_money > Level_Profit)
      {
       #include "scripts\s_close_all.mq4"
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+

¿o sería mejor insertar el código del script en el EA?