[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 476

 
¡¡¡Artemis es super!!!
 
Roman.:


1. Por si acaso - lea toda la información en mis enlaces del puesto 7 de esta página.

2. Mira el tráiler para ver el recorrido de tu pregunta. El segundo archivo es mi ejemplo de trabajo con el optimizador de estrategias y la dependencia, actualmente en el gráfico, de los valores de stop y beneficio de la TS obtenidos como resultado de la optimización a partir del Factor de Recuperación. Yo mismo lo estoy utilizando desde hace poco - todavía estoy trabajando en ello, así que todas las preguntas a sus autores. Mira su sitio web a través de la página.

3. Todo, en mi opinión.


¡¡¡Oh, genial!!! ¿Ese programa no se llama Excel? ¿Cómo se utiliza, cómo se ahorra en él?
 

Soy un total principiante en esto, pero por favor ayúdame a escribir un EA que funcione de esta manera, primero solo abrir una orden de compra y poner un take profit y stop loss, luego si esta orden se cierra cuando se dispara el take profit, entonces se abre la misma orden de compra, y si se cierra cuando se dispara el stop loss es para vender
 
¿Cómo guardo los resultados en Excel? En el probador hice clic en guardar todo, busqué y abrí excel, hice clic en pegar sobre fondo blanco, no pasó nada. Quizá mi hermano venga pronto y me eche, por el ordenador.
 
dkfl.zrjdktdbx:
¿Cómo guardo los resultados en Excel? En el probador hice clic en guardar todo, busqué y abrí excel, hice clic en pegar sobre fondo blanco, no pasó nada. Quizá mi hermano venga pronto y me eche, por el ordenador.
Quizá debería comprar un segundo ordenador.
 
Algún día...
 
dkfl.zrjdktdbx:
¿Cómo guardo los resultados en Excel? En el probador hice clic en guardar todo, busqué y abrí excel, hice clic en pegar sobre fondo blanco, no pasó nada. Quizá mi hermano venga pronto y me eche, por el ordenador.

Copiar todo y pegar, sólo el nombre de las columnas que tengo que escribir, y la rentabilidad se traduce en meses en mí.
 
dkfl.zrjdktdbx:

¡¡¡Oh, genial!!! ¿Ese programa no se llama Excel? ¿Cómo utilizarlo, cómo ahorrar en él?

Lea su ayuda y la documentación de MicrosoftOffice-excel... :-)
 

Compañeros, hace poco hice una pregunta sobre el hecho de que el EA funciona de manera diferente en una cuenta real que en el probador de estrategias. Has dicho que sin el código del propio EA no hay forma de averiguarlo. Aquí está el código:

En pocas palabras, el EA funciona según el principio de Martingala, es decir, abre con un lote doble si la operación anterior no tuvo éxito. Si se equivoca más de 3 veces, entonces asumo que un piso comenzó y cambiar los tamaños de los lotes y paradas, pero proporcionalmente como si el EA sigue abriendo en la otra dirección con doble lote.

Si todo era bueno, se abre en la misma dirección con un lote. Así que aquí está el problema: En el Probador de Estrategias todo funciona bien, pero en mi cuenta real ya está abriendo la segunda operación con un lote de 0,24 (este número se establece en la función de cambio)... Ayuda por favor... Tengo muchas ganas de probarlo en una cuenta real, el problema me mantiene en la cuenta demo =(

//+------------------------------------------------------------------+ 
//| StMartin++.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int ticket,total; 
    int slip = 3; 
    int Magic = 4; 


    static int CriticalTicket = 0; 

    int TicketArray[4]; //миссив с тикетами
    int CTicketArray[10]; //массив с критическими тикетами

    void FormTicket(int number) //объявил шаблон под функцию запоминания тикетов 
    { 
      for(int i=3;i>0;i--) 
      { 
         TicketArray[0] = ticket; 
         if(TicketArray[0]>0 && TicketArray[0] == TicketArray[1])break; 
         TicketArray[i] = TicketArray[i-1]; 
      } 
    } 
    
    void FormCriticalTicket(int number1) //сюда записываю критическме тикеты
    { 
      for(int i=9;i>0;i--) 
      { 
         CTicketArray[0] = CriticalTicket; 
         if(CTicketArray[0]>0 && CTicketArray[0] == CTicketArray[1])break; 
         CTicketArray[i] = CTicketArray[i-1]; 
      } 
    }  


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 
     if(OrdersHistoryTotal()==0) 
     { 
        ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
     } 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 
FormCriticalTicket(CriticalTicket); //вызываем функцию, что запоминала критические тикеты
int CritLot = crit(); //функция берет минимальное значение из массива критических тикетов
int OrderTimeCheck = check3(); //проверяем, закрыт ли ордер 
bool OrderCloseCheck = check2(OrderTimeCheck); //проверяем, закрылись ли ордера в минус 
FormTicket(ticket); //вызываем функцию, чтоб запоминала тикеты 
OrderOpenFunction(OrderCloseCheck,CritLot); //тут открываем ордера 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 


int crit()
{
   return(ArrayMinimum(CTicketArray,6,1));
}

int check3() //проверяем, закрыт ли ордер 
{ 
   OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
   if(OrderClosePrice()==OrderTakeProfit()) 
      { 
         CriticalTicket=0;
      } 
   if(OrderCloseTime()>0)return(100); 
} 

bool check2(int OrderTimeCheck) //проверяем, если ордер закрыт, то последние 3 закрытых ордера были ли убыточными? 
{ 
   if(OrderTimeCheck == 100) 
   { 
      bool flag = true; 
      for(int j=1;j<4;j++) 
      { 
         OrderSelect(TicketArray[j],SELECT_BY_TICKET); 
         if(OrdersHistoryTotal()>2) 
         { 
            if(OrderClosePrice()!=OrderStopLoss()) 
            { 
               flag = false; 
            } 
         } 
         if(OrdersHistoryTotal()<=2) 
         { 
            flag = false; 
         } 
      } 
      return(flag); 
   } 
   else
      return(false); 
} 

void OrderOpenFunction(bool OrderCloseCheck, int CritLot) 
{ 
   total = OrdersTotal();
   if(OrderCloseCheck==true)
   {
      int TP1,TS1;
      double m1,m2,m3,m4,m5,m6;
      m1=1.2;
      m2=1.25;
      m3=2.0;
      m4=1.0;
      m5=1.25;
      m6=1.0;
   
      OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
      switch(CritLot)
      {
         case 1: volumz = (OrderLots()*2)*m1;
                  TP1=TP/m1;
                  TS1=TS/m1; 
                  break;
         case 2: volumz = (OrderLots()*2)*m2/m1;
                  TP1=TP/m2;
                  TS1=TS/m2; 
                  break;
         case 3: volumz = (OrderLots()*2)*m3/m2;
                  TP1=TP/m3;
                  TS1=TS/m3; 
                  break;
         case 4: volumz = (OrderLots()*2)*m4/m3;
                  TP1=TP/m4;
                  TS1=TS/m4;
                  break;
         case 5: volumz = (OrderLots()*2)*m5/m4;
                  TP1=TP/m5;
                  TS1=TS/m5;
                  break;
         case 6: volumz = (OrderLots()*2)*m6/m5;
                  TP1=TP/m6;
                  TS1=TS/m6;
                  break;
      }

      if(total < 1) 
      { 
         if(OrderType()==OP_SELL) 
         { 
            double lot3 = volumz; 
            ticket = OrderSend(Symbol(),OP_BUY,lot3,Ask,slip,Bid-TS1*Point,Bid+TP1*Point,0,Magic,0,Green); 

            if(ticket>0) 
            { 
               CriticalTicket = ticket; 
            } 
         } 
         if(OrderType()==OP_BUY) 
         { 
            OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
            double lot4 = volumz; 
            ticket = OrderSend(Symbol(),OP_SELL,lot4,Bid,slip,Ask+TS1*Point,Ask-TP1*Point,0,Magic,0,Red); 

            if(ticket>0) 
            { 
               CriticalTicket = ticket; 
            } 
         } 
      } 
   }   
   if(OrderCloseCheck==false) 
   { 
      if(total < 1) 
      { 
         OrderSelect(TicketArray[1],SELECT_BY_TICKET); 
         volumz = OrderLots(); 
         if(OrderClosePrice() == OrderStopLoss()) 
         { 
            if(OrderType() == OP_BUY) 
            { 
               double lot1 = volumz*2; 
               ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
            } 
            if(OrderType() == OP_SELL) 
            { 
               double lot2 = volumz*2; 
               ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
            } 
         } 
         if(OrderClosePrice() == OrderTakeProfit()) 
         { 
            if(OrderType() == OP_BUY) 
            { 
               ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
            } 
            if(OrderType() == OP_SELL) 
            { 
               ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
            } 
         } 
      } 
   } 
} 

todas las explicaciones están ahí... Si necesita más, estaremos encantados de ayudarle.

 
Hola a todos, Feliz Año Nuevo. No encuentro ninguna forma de realizar un pedido sólo una vez, si se cumple la condición después de la cual se realiza el pedido, entonces si hay un pedido por segunda vez no se realizará. Si puede dar un ejemplo.