Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 375

 
okidoki543:
Se alguém quiser me ajudar (ver acima), eu estou aberto à colaboração.
Em uma base comercial, sem problemas, haverá uma fila de pessoas que querem ajudar. Caso contrário... Comece a escrever você mesmo e a ajuda virá.
 
Ekburg:

colocar OrderStopLoss() em vez de sl


não funcionou...

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 funcionar, mas algo não é contabilizado...

 
alexey1979621:
Sim, agora abre, mas abre um monte de negócios, e eu preciso apenas de dois negócios para abrir em determinados pares, digamos para EURAUD e AUDUSD.

O algoritmo é mais simples do que uma árvore de feltro:

1. Se não houver posições no EuroAudi, abra uma posição,

2. Se não houver nenhuma posição no AudiBucks - abra uma posição.

 
vadynik:


não funcionou...

parece que deve funcionar, mas algo não está contabilizado...

O preço não deveria ser aberto no laço já após a seleção do pedido?
 
artmedia70:

O algoritmo é mais simples do que uma árvore de feltro:

1. Se não houver posições no EuroAudi, abra uma posição,

2. Se não houver nenhuma posição no AudiBucks - abra uma posição.


Não, Artemis, isso não funciona assim na minha situação.
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:
Não, Artemida, isso não funciona para a minha situação.


No laço, recalcule as posições dependendo do símbolo e do mágico.

E o que é isto: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);


P.S.: Artemida não Artemida a

Artmedia

 
evillive:


No laço, recalcule as posições dependendo do símbolo e do mágico.

E o que é isto: OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);


P.S.: Artemida não é Artemida a

Artmedia


Vamos lá, estou acostumado a que todos me chamem nomes ... o que quer que seja ...

Na verdade, o preço de fechamento nesta função funcionava bem. O compilador encheria por si só o preço necessário. Alguém aqui recentemente teve esta causa um erro.

 
artmedia70:

Vamos lá, estou acostumado a que todos me chamem nomes ... o que quer que seja...

Está na hora de mudar seu apelido?
 
alexey1979621:
Não, Artemis, isso não funciona assim na minha situação.


Sim, bem... Em sua situação, quando é tão torta, as propostas normais não funcionam realmente...
 
Zhunko:
Está na hora de mudar seu apelido?

Este apelido tem 300 anos de idade... Eu me afeiçoei a isso.