[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 385

 
Michey25 >>:

что тут не так?

Короче этот советник я прикрепляю к часовому графику, и если цена в начале часа выше чем cn1 а текущая не привышает её на 8 пунктов то ордер должен открыться (также если цена ниже текущего уровня) А он у меня почему-то сразу открывает позицию. Почему?

E dove è scritta la condizione di 8 punti? Meglio moltiplicare 8 per MarketInfo(NULL,MODE_POINT);

 
splxgf >>:

А где записано условие на 8 пунктов? лучше восемь умножать на MarketInfo(NULL,MODE_POINT);

(a-cn1)<0.0008)

 
Aiutatemi a unire due EA. Expert PYLOSE chiude gli ordini con un certo MAGIKOM quando una data quantità di denaro, e l'EA Trailing segue l'equity quando raggiunge una data quantità.Aiutatemi a inserire del codice di Trailing in PYLOSE, anch'esso segue, ma non chiude gli ordini con un dato MAGIKOM quando raggiunge una determinata quantità.Ed eventualmente commentate i fondi di trailing visualizzati sullo schermo.Grazie!
File:
archive_1.zip  10 kb
 

Michey25


quando rispondevo il codice era un po' diverso ;)

Anche se ci sono alcune domande, il risultato di op(0) dipende molto dal tempo corrente. non è chiaro da dove vengono i cn e che tipo sono.

Non potete fare Alert(Open[0],cn1,Open[0]<cn1,a,(a-cn1)<0.0008)?

Inoltre è meglio usare break invece di i=1, questo farà uscire il ciclo immediatamente invece di eseguire tutti i comandi fino alla fine.

int i=0;
   double a,b;
   while (i==0)
   {
     a=MarketInfo("USDCAD", MODE_ASK);
     b=MarketInfo("USDCAD", MODE_BID); 
     if((Open[0]<cn1)&&((a-cn1)<0.0008))
      {
       OrderSend("USDCAD",OP_BUY,1,a,1,SL,cn2);
       i=1;
       }
     if((Open[0]>cn11)&&((cn11-b)<0.0008))
      {
       OrderSend("USDCAD",OP_SELL,1,b,1,SL1,cn21);
       i=1;
      }  
   }
 

Salve. Per favore, aiutatemi a implementare la seguente cosa. Ci sono 2 condizioni indipendenti in un EA, in base alle quali vengono aperti ordini separati, ognuno con la sua magia. In qualsiasi momento su un grafico ci può essere un solo ordine per ciascuna delle condizioni, e possono essere allo stesso tempo l'uno con l'altro. Per verificare la possibilità di aprire ordini, faccio la seguente struttura

int CalculateCurrentOrders(string symbol)
  {
   int buys=0, sells=0, buystop=0, sellstop=0;
//----
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()== MAGIC1 || OrderMagicNumber()== MAGIC2))
              {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
          if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//----
   if( buys>0) return( buys);
   else       return(- sells);

Ma gli ordini vengono aperti solo con la seconda magia.

Poi gli ordini sono anche chiusi indipendentemente l'uno dall'altro. Allo stesso tempo, l'ordine con la prima magia usa una traccia e il secondo non

Ho usato questo esempio, ma la chiusura o non avviene secondo le regole della prima o della seconda condizione, o non avviene affatto

 

  for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1)
     if(OrderType()==OP_BUY) 
     if ( Sell1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
             }
                     
      if(OrderType()==OP_SELL) 
      if ( Buy1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
             }
  
      if(OrderType()==OP_BUYSTOP && Sell1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buy1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
    }
   
   for(int i2=0; i2<OrdersTotal(); i2++)
     {
      if(OrderSelect( i2, SELECT_BY_POS, MODE_TRADES)) 
   
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC2)
     if(OrderType()==OP_BUY)
      if ( Sellcl0==1)
       {

       OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
            }
                 
    if(OrderType()==OP_SELL) 
    if ( Buycl0==1)
    
            {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
          
        }
     if(OrderType()==OP_BUYSTOP) 
     if ( Sellcl0==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buycl0==1)
        {
         OrderDelete(OrderTicket());
        return(0);
         }
      }   
    
     // MODIFICATION -------
     
     TrailingPositionsBuy( parab);
    TrailingPositionsSell( parab);
   // TrailingPositionsBuystop(parab);
   // TrailingPositionsSellstop(parab);
    return (0);
   }
/*bool ExistPositions() {
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
            return(True);
         }
      } 
   } 
   return(false);
}*/
     
void TrailingPositionsBuy(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_BUY) { 
             //  if (Bid-OrderOpenPrice()>trailingStop*Point) { 
              //    if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss( parab);
                                   
               } 
            } 
         } 
      } 
   } 
//} 
void TrailingPositionsSell(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_SELL) { 
             //  if (OrderOpenPrice()-Ask>trailingStop*Point) { 
             //     if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss( parab);
                  
               } 
            } 
         } 
      } 
   } 

Sell1, buy1, sellcl0, buycl0 sono descrizioni di condizioni di chiusura.


Un tale doppio annullamento di posizioni funzionerebbe mai? Grazie!

 
exolon >>:

Здравствуйте. Помогите пожалуйста реализовать такую вещь. В одном эксперте работают 2 независимых условия, на основе которых открываются отдельные ордера, каждый со своим magic. В каждый момент времени на одном графике может быть только один ордер по каждому из условий, при этом они могут быть одновременно друг с другом. Для проверки возможности открытия ордеров делаю такую конструкцию

Но открываются ордера только со вторым magic.

Далее, закрываются ордера тоже независимо друг от друга. При этом ордер с первым magic использует трал, а второй нет

Применил вот такой вариант, но закрытия либо происходят не по правилам ни от первого, ни от второго условия, либо не происходят вообще

sell1, buy1, sellcl0, buycl0 - описания условий на закрытие.


Будет ли вообще работать такой двойной перебор позиций? Благодарю!


dopo aver chiuso e cancellato gli ordini, rimuovere il destinatario e metterlo alla fine della funzione o mettere invece un continuum

 

Ciao a tutti, sto scrivendo il mio primo programma mql e imparando il linguaggio allo stesso tempo.

Sto imparando la lingua, potete consigliarmi per favore?


Ho una domanda: se sto scrivendo il mio primo programma mql, vorrei sapere cosa c'è di sbagliato. Puoi dirmi cosa c'è che non va? Ho passato quattro ore a guardare il libro di riferimento, non lo capisco nemmeno io.


void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

 
Jahspear писал(а) >>

Ciao a tutti, sto scrivendo il mio primo programma mql e imparando il linguaggio allo stesso tempo.

Sto imparando la lingua, potete consigliarmi per favore?

Ho una domanda: se sto scrivendo il mio primo programma mql, vorrei sapere cosa c'è di sbagliato. Puoi dirmi cosa c'è che non va? Ho frugato nel libro di riferimento per circa quattro ore, non lo capisco.

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

E quello per cui ho fatto il loop. Se non c'è una condizione, non dobbiamo aspettare un numero sconosciuto di giorni perché il segnale appaia.

 

Buon pomeriggio.

L'indicatore ha IndicatorShortName("iC_C_mod, ..... ");

Ho bisogno però, oltre a questa didascalia, di inserire un commento con una variabile che cambia dinamicamente nella finestra dell'indicatore.

Come f-i Comment();

Mi serve nella finestra dell'indicatore, ma non sul grafico.

Si prega di consigliare?

 
Jahspear >>:



void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}


Probabilmente qualcosa del genere, perché i cicli infiniti richiedono un tempo molto lungo sull'hardware moderno.