[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 441

 

Hola a todos.

No consigo que el depósito se cargue correctamente en el informe de operaciones. )) Yo hago esto:

#define RA 10000

if(Trade_Report == TRUE && !IsOptimization())
   {  int      pos;
      int      handle;
      int      Days;
      double   Swap_M;
      double   Profit_M;
      double   Swap_P;
      double   Profit_P;

      double   Source_LP[RA], LP_01[RA], LP_02[RA], LP_03[RA], LP_04[RA], LP_05[RA], LP_06[RA];
      double   Source_LP_02[RA], LP_01_02[RA], LP_02_02[RA], LP_03_02[RA], LP_04_02[RA], LP_05_02[RA], LP_06_02[RA];
      double   Source_SP[RA], SP_01[RA], SP_02[RA], SP_03[RA], SP_04[RA], SP_05[RA], SP_06[RA];
      double   Source_SP_02[RA], SP_01_02[RA], SP_02_02[RA], SP_03_02[RA], SP_04_02[RA], SP_05_02[RA], SP_06_02[RA];
      double   Load_Depo[RA]; 
   
      handle = FileOpen("OrdersReport.csv",FILE_CSV|FILE_WRITE);
   
      if(handle > 0)
                {//1
            FileWrite(handle,"Time Close"+","+"Lots"+","
                              +"Swap($)"+","+"Profit($)"+","+"Swap(p)"+","+"Profit(p)"+","+"Load Depo"+","
                              +"SOURCE_LP"+","+"LP#01"+","+"LP#02"+","+"LP#03"+","+"LP#04"+","+"LP#05"+","+"LP#06"+","
                              +"SOURCE_SP"+","+"SP#01"+","+"SP#02"+","+"SP#03"+","+"SP#04"+","+"SP#05"+","+"SP#06");
            for(pos = 0; pos < OrdersHistoryTotal(); pos++)
               {  OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); //2
               
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_Source_LP && OrderCloseTime() == TimeCurrent()) { Source_LP[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP01 && OrderCloseTime() == TimeCurrent()) { LP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP02 && OrderCloseTime() == TimeCurrent()) { LP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP03 && OrderCloseTime() == TimeCurrent()) { LP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP04 && OrderCloseTime() == TimeCurrent()) { LP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP05 && OrderCloseTime() == TimeCurrent()) { LP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_BUY && OrderMagicNumber() == Magic_LP06 && OrderCloseTime() == TimeCurrent()) { LP_06[pos] = OrderProfit(); }
                     
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP && OrderCloseTime() == TimeCurrent()) { Source_SP[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP01 && OrderCloseTime() == TimeCurrent()) { SP_01[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP02 && OrderCloseTime() == TimeCurrent()) { SP_02[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP03 && OrderCloseTime() == TimeCurrent()) { SP_03[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP04 && OrderCloseTime() == TimeCurrent()) { SP_04[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP05 && OrderCloseTime() == TimeCurrent()) { SP_05[pos] = OrderProfit(); }
                  if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_SP06 && OrderCloseTime() == TimeCurrent()) { SP_06[pos] = OrderProfit(); }
                  
            //--- Вычисление загрузки депозита ---//
                  int              Amount_LD;
                  datetime         CurrentCloseTime = OrderCloseTime();
                  static datetime  CloseTime;                  
                  
                  if(CurrentCloseTime != CloseTime)
                     { Amount_LD = 1;
                       Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                       CloseTime = OrderCloseTime(); }
                  else if(CurrentCloseTime == CloseTime)
                          { Amount_LD++;
                            Load_Depo[pos] = (Amount_LD*(OrderLots()*1000)/AccountBalance())*100;
                            CloseTime = OrderCloseTime(); }
            //---------------------------------------------------------------------------------------------------------------------
                     
                  Swap_M     =  OrderSwap();
                  Profit_M   =  OrderProfit();
                  Swap_P     = (OrderSwap()/10)/OrderLots();
                  Profit_P   = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots();
                     
                  if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                     {   FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+DoubleToStr(OrderLots(),2)+"," //3
                                          
                                          +DoubleToStr(OrderSwap(),2)+","+DoubleToStr(Profit_M+Swap_M,2)+","+DoubleToStr(Swap_P,2)+","
                                          +DoubleToStr(Profit_P,2)+","+DoubleToStr(Load_Depo[pos],2)+","
                                          
                                          +DoubleToStr(Source_LP[pos],2)+","+DoubleToStr(LP_01[pos],2)+","+DoubleToStr(LP_02[pos],2)+","
                                          +DoubleToStr(LP_03[pos],2)+","
                                          +DoubleToStr(LP_04[pos],2)+","+DoubleToStr(LP_05[pos],2)+","+DoubleToStr(LP_06[pos],2)+","
                                             
                                          +DoubleToStr(Source_SP[pos],2)+","+DoubleToStr(SP_01[pos],2)+","+DoubleToStr(SP_02[pos],2)+","
                                          +DoubleToStr(SP_03[pos],2)+","
                                          +DoubleToStr(SP_04[pos],2)+","+DoubleToStr(SP_05[pos],2)+","+DoubleToStr(SP_06[pos],2));  } //3
               }  FileClose(handle); //2
         }//1

En consecuencia, no se calcula correctamente al principio. Los valores de la matriz Load_Depo cambian constantemente y es necesario que también se consideren las posiciones abiertas. Que alguien me muestre un ejemplo, si tiene un minuto libre. ))

 
demlin:
Sinceramente, no lo entiendo, es tan complicado)))
¿Ni siquiera los ejemplos del script de prueba ayudan?
 
FreeSerfer:

Gracias, el punto está claro, siento no ser muy bueno con el lenguaje de programación.

Supongamos:

Azul - número 0 - señal de compra

Rojo - número 1 - señal de venta

y otra pregunta, la flecha puede parpadear mientras se forma una barra por encima de la cual puede bloquearse y dar una señal. Las operaciones deben abrirse después de que se forme la señal

¿Puede alguien implementar esto en código?

¿Estás estudiando la programación o buscas a alguien que lo haga por ti?

Víctor ya ha explicado que hay que utilizar la función iCustom(). Lee sobre ello en la ayuda del MetaEditor. Allí está bastante detallado. Para evitar un "flutter" - utilice en iCustom() los datos de la primera barra en lugar de cero - ya se ha formado completamente.

Cuando empieces a escribir algo por ti mismo, te gustará recibir ayuda y corrección aquí...

 
artmedia70:

¿Estás aprendiendo a programar o buscas a alguien que lo haga por ti?

Víctor ya te ha dejado claro que tienes que utilizar la función iCustom(). Lee sobre ello en la ayuda del MetaEditor. Allí está bastante detallado. Para deshacerse de la "charla" - utilice los datos de la primera barra en lugar de la barra cero en iCustom() - ya se ha formado completamente.

Cuando empieces a escribir algo por ti mismo, aquí te ayudarán con gusto y te corregirán cualquier cosa...

Yo mismo escribo, aunque me cuesta, y sólo me queda la vinculación del Asesor Experto al indicador, aunque gracias a Víctor pronto se solucionará con mi propio esfuerzo. En cualquier caso, gracias a todos los que han respondido y han mostrado la dirección en la que hay que moverse.
 
peshihod:

Puede haber innumerables opciones. Lo mejor es elegir los más sencillos. Por ejemplo:


int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Ayuda.... Responde a la pregunta ..............

Esta es la parte que se activa en cada tick

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Y sólo debería activarse con cada nuevo pedido abierto, una vez.

¿Tal vez haya que añadir algún contador, por ticks, magiks u otro identificador de órdenes?

----------------------------------------------------------------------------------------

¿Hay que crear una variable Orderov?
¿Puedo hacerlo así?

for(i=0;i<OrdersTotal();i++)

¿Necesita una variable "k" en el script?

int i,k;

 
Zhunko:
¿Que ni siquiera los ejemplos del script de prueba ayudan?
Gracias por los comentarios, he solucionado el problema de una forma diferente y más sencilla ))
 
semiromid:

Esta es la parte que se activa en cada tick

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Y debe activarse sólo una vez con cada nuevo pedido abierto.

¿Tal vez debería haber un contador adjunto, por ticks, magiks u otro identificador de orden?

----------------------------------------------------------------------------------------

¿Hay que hacer una variable Orderov?
¿Podemos hacerlo así?

for(i=0;i<OrdersTotal();i++)

¿El script necesita una variable "k"?

Lo has entendido todo mal.

Intentas componer poesía en alemán sin saber una palabra. ¿Me explico?

Lee la referencia, aprende todas las funciones y propiedades del lenguaje. Te llevará un par de meses. Utilice los ejemplos que se incluyen en la instalación de MetaTrader4. Entonces hablaremos. Todavía no sabes de qué estamos hablando.

 
peshihod:

Lo has entendido todo mal.

Intentar componer poesía en alemán sin saber una sola palabra. ¿Me explico?

Lee la referencia, aprende todas las funciones y propiedades del lenguaje. Te llevará un par de meses. Utilice los ejemplos que se incluyen en la instalación de MetaTrader4. Entonces hablaremos. Todavía no sabes de qué estamos hablando.


Soy un principiante en programación y no tengo maestros. Y si le resulta difícil responder a las preguntas que son importantes para mí, podría no haberme escrito nada.

Y me dirijo a ti como tú, en realidad.....

 
semiromid:


Soy un principiante en programación y no tengo maestros. Si le resulta difícil responder a las preguntas que son importantes para mí, podría no haberme escrito nada.

Y me dirijo a ti como tú, en realidad.....


Lo siento.

Escribí sobre cómo no se puede aprender a nadar en tierra.

 
peshihod:


Disculpen.

Escribí sobre cómo no se puede aprender a nadar en tierra.


A veces hay que hacer preguntas para entender algo.

int Orderov;
int Tip;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,k;

Orderov=OrdersTotal();

for(i=0;i<Orderov;i++)
{
OrderSelect(i,SELECT_BY_POS);

switch( OrderType() )
{
case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;

case OP_BUYLIMIT:
//Задача для ордера типа OP_BUY
break;

/////------ и т.д.




}
}

return(0);
}

Ayuda.... Responde a la pregunta ..............

Esta es la parte que desencadena cada tic.

case OP_BUY:
//Задача для ордера типа OP_BUY
break;

case OP_SELL:
//Задача для ордера типа OP_BUY
break;


Sólo debería activarse cada vez que se abre una nueva orden, una vez.

Tal vez tenga que adjuntar algunos contadores, por ticks, magiks u otros identificadores de órdenes, o tal vez matrices? No sé qué tiene que ver, no puedo avanzar hasta que lo descubra.

----------------------------------------------------------------------------------------

¿Hay que hacer una variable Orderov?
¿Puedo hacerlo así?

for(i=0;i<OrdersTotal();i++)

¿Necesita el script una variable "k"?

int i,k;