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

 
okidoki543:
Si alguien quiere ayudarme (ver arriba), estoy abierto a la colaboración.
A nivel comercial, no hay problema, habrá una cola de gente que quiera ayudar. Por lo demás... empieza a escribir tú mismo y la ayuda llegará.
 
Ekburg:

poner OrderStopLoss() en lugar de sl


no funcionó...

void VirtualTral(int Dist_Tral,int Start_Tral,int Magic,int SL)
{

double dist=Dist_Tral;
double start=Start_Tral;
double priceopen=OrderOpenPrice();
double sl=OrderStopLoss();
 
if(OrdersTotal()<=0)
ObjectDelete("Stop"); 

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {  

       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {                    
                sl=NormalizeDouble(Bid-dist*Point,Digits);
                Print(+sl);
                ObjectCreate("Stop",OBJ_HLINE,0,D'2013.02.20 12:30',sl);                                                         
                ObjectSet("Stop",OBJPROP_STYLE,1);                                                                                         
                ObjectMove("Stop",0,D'2013.02.20 12:30',sl);                                                                                                 
                if (NormalizeDouble(sl*Point,Digits) >=Bid)
             {
                Print("Закрываем");
                OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue);
             }
         }               
      }
   }
}

Parece que funciona, pero hay algo que no se tiene en cuenta...

 
alexey1979621:
Sí, ahora lo hace, pero abre un montón de operaciones, y sólo necesito dos operaciones para abrir en los pares especificados, digamos EURAUD y AUDUSD.

El algoritmo es más sencillo que un árbol de fieltro:

1. Si no hay posiciones en el EuroAudi, abra una posición,

2. Si no hay ninguna posición en AudiBucks - abra una posición.

 
vadynik:


no funcionó...

parece que debería funcionar, pero hay algo que no se tiene en cuenta...

¿No debería tomarse el precio abierto en el bucle ya después de seleccionar el pedido?
 
artmedia70:

El algoritmo es más sencillo que un árbol de fieltro:

1. Si no hay posiciones en el EuroAudi, abra una posición,

2. Si no hay ninguna posición en AudiBucks - abra una posición.


No, Artemis, no funciona así en mi situación.
extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}

 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
 
   return(0);
  }
 
alexey1979621:
No, Artemida, no funciona para mi situación.


En el bucle, recalcula las posiciones en función del símbolo y del mago.

Y qué es esto: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);


P.D.: Artemida no Artemida a

Artmedia

 
evillive:


En el bucle, recalcula las posiciones en función del símbolo y del mago.

Y qué es esto: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);


P.D.: Artemida no es Artemida a

Artmedia


Vamos, estoy acostumbrado a que todos me insulten... lo que sea...

En realidad, el precio de cierre en esta función solía funcionar bien. El compilador se encargaría de meter el precio necesario por sí mismo. A alguien de aquí le causó un error recientemente.

 
artmedia70:

Vamos, estoy acostumbrado a que todos me insulten... lo que sea...

¿Es hora de cambiar de apodo?
 
alexey1979621:
No, Artemis, no funciona así en mi situación.


Sí, bueno... En tu situación, cuando está tan torcido, las propuestas normales no funcionan realmente...
 
Zhunko:
¿Es hora de cambiar de apodo?

Este apodo tiene 300 años... Le he cogido cariño.