Domanda sul consulente multivaluta - pagina 13

 

Buongiorno!

Si prega di avvisare. Questo è il modo in cui vengono aperte le posizioni per ogni coppia nell'EA multivaluta.

//ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ
//-------------------------Изначальная позиция ----------
if ( Trade && pb==0 && (iBarShift("EURCHF_FX", timeFr, OpenTime1)!= 0) 
//если нет открытых дл. позиций и не было на этом баре
   && Bid_< Lbid+ Delta* Point_){
if ( iMA("EURCHF_FX",0, period_MA,0,MODE_SMMA,PRICE_MEDIAN,0)< iClose("EURCHF_FX", period_TF,0)
// || !Filter_DT)  { //если фильтр разрешает  
   SL=0; TP=0;
if( StopLoss>0)   SL= Ask_- Point_* StopLoss;
if( TakeProfit>0) TP= Ask_+ Point_* TakeProfit;   
ticket= WHCOrderSend("EURCHF_FX",OP_BUY, Lots, Ask_,3, SL, TP,"_001", Magic,0,Blue);
if( ticket < 0) { Print("Ошибка открытия ордера BUY EURCHF_FX  #", GetLastError()); 
               Sleep(10000);   return (0); }
 initorders();               
OpenTime1 = iTime("EURCHF_FX", timeFr,0);
   }}
//жжжжжжжжж Дополнительная позиции жжжжжжжжжжжжжжжжж 
if ( NumberOfPositions("EURCHF_FX",OP_BUY, Magic)==1 && 
NumberOfPositions("EURCHF_FX",OP_BUY, Magic_2)<1) {
//если открыта начальная позици
 if ( GetProfitOpenPosInPoint("EURCHF_FX",OP_BUY, Magic)<= LEVEL_1
  && iBarShift("EURCHF_FX", timeFr, OpenTime1)!= 0) {
//и если убыток начальн. позиции больше заданного значения
 SL=0; TP=0;
if( StopLoss>0)   SL= Ask_- Point_* StopLoss;
if( TakeProfit>0) TP= Ask_+ Point_* TakeProfit;   
ticket= WHCOrderSend("EURCHF_FX",OP_BUY, Lots+ dL2, Ask_,50, SL, TP,"002", Magic_2,0,Blue);
if( ticket < 0) { Print("Ошибка открытия ордера BUY EURCHF_FX #", GetLastError()); 
               Sleep(10000);   return (0); }
            
OpenTime1 = iTime("EURCHF_FX", timeFr,0);
   } } 
//ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ

Si prega di avvisare. Come posso scrivere una funzione separata al posto di questo blocco.

Quindi non devo riscrivere questo blocco per ogni coppia?

(Il blocco usa il fi di I.Kim e il fi di apertura di Market Watch).

 
Rita писал(а) >>

Buongiorno!

Si prega di avvisare. Questo è il modo in cui vengono aperte le posizioni per ogni coppia nell'EA multivaluta.

Si prega di avvisare. Come posso scrivere una funzione separata invece di questo blocco.

Quindi non devo riscrivere questo blocco per ogni coppia?

(Ho usato il fi di I.Kim e il fi di apertura di Market Watch in condizioni di esecuzione degli ordini a mercato).

void FUN(string _Symbol){

// Il vostro codice, ma usando _Symbol invece di un simbolo

}

 

Grazie. Che dire di offerte, richieste, delta, lotti e bool TRADE (questo è il permesso di ingresso) per ogni coppia?

Sarebbe corretto? -

void FUN(string _Symbol, bool TRADE, double _BID, double _AZK,
         double _Delta,  double _LOTS){

Anche. Mi sembra di aver sentito dire di sfuggita che non è corretto usare (chiamare) una funzione personalizzata dentro un'altra.

E sto usando una funzione in un blocco per aprire posizioni in esecuzione di ordine di mercato Market Watch

int WHCOrderSend(string symbol,   int cmd,   double volume, 
                 double price,int slippage,double stoploss, 
                 double takeprofit,string comment, nt magic, 
                 datetime expiration,   color arrow_color)
{  int ticket = OrderSend( symbol, cmd, volume, price, slippage, 0, 0, comment,
magic, expiration, arrow_color);                              int check = -1;
if ( ticket > 0 && ( stoploss != 0                      || takeprofit != 0)) {
if(!OrderModify( ticket, price, stoploss, takeprofit, expiration, arrow_color)) {
check = GetLastError();                         if ( check != ERR_NO_ERROR) {
Print("OrderModify error: ", ErrorDescription( check)); }   }   }      else {
check = GetLastError();                          if ( check != ERR_NO_ERROR){
Print("OrderSend error: ", ErrorDescription( check));   }}   return ( ticket);}
Non ci saranno problemi e malfunzionamenti?
 
Rita писал(а) >>

Grazie. Che dire di offerte, richieste, delta, lotti e bool TRADE (questo è il permesso di ingresso) per ogni coppia?

Sarebbe corretto? -

Inoltre. Mi sembra di aver sentito dire di sfuggita che non è corretto usare (chiamare) una funzione personalizzata dentro un'altra.

E io uso nel mio blocco la funzione per l'apertura di posizioni in condizioni di esecuzione degli ordini di mercato Market Watch

Non ci saranno problemi e malfunzionamenti?

double _Bid=MarketInfo(_Symbol, MODE_BID);

double _Ask=MarketInfo(_Symbol, MODE_ASK);

....................................................................

La funzione di chiamata può essere in qualsiasi posto. Non ci saranno problemi.

 
OK. Grazie.
 

Buon pomeriggio!

Uso una rete a strascico in un camion con più valute. È così:

void TrailPositions() // функция трейлинг стоп
{
  int Orders = OrdersTotal();
  for (int i=0; i< Orders; i++) {
    if (!(OrderSelect( i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
     if (OrderMagicNumber() == Magic ){ 
//--------------------------------------   
     if (OrderType() == OP_BUY )  {
      if (Bid-OrderOpenPrice() > MinProfit*Point) {
        if (OrderStopLoss() < Bid-( TrailingStop+ TrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid- TrailingStop*Point,
                                                     OrderTakeProfit(), 0, Blue);
        }}}
//-----------------------------------------
     if (OrderType() == OP_SELL)  {
      if (OrderOpenPrice()-Ask > MinProfit*Point) {
        if (OrderStopLoss() > Ask+( TrailingStop+ TrailingStep-1)*Point 
                                                       || OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+ TrailingStop*Point,
                                                      OrderTakeProfit(), 0, Blue);
        }}} 
//---------------------------------------------  
 }   }  }

Al fine di impegnare la pesca a strascico per tutte le coppie di multicurrency, l'ho rielaborato in questo modo.

(I punti d'acquisto sono chiamati tramite MarketInfo(Symbol_1,MODE_ASK);

void TrailPositions(string _Symbol,
                    double _BID,
                    double _AZK,
                    double _Point,
                    int MAGIC,
                    int MinProfit,
                    int TrailingStop,
                    int TrailingStep) 
{  int Orders = OrdersTotal();  for (int i=0; i< Orders; i++) {
    if (!(OrderSelect( i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != _Symbol) continue;
     if (OrderMagicNumber() == MAGIC){ 
//----------------------------------------------------   
     if (OrderType() == OP_BUY )  {
      if (_BID-OrderOpenPrice() > MinProfit*_Point) {
        if (OrderStopLoss() < _BID-( TrailingStop+ TrailingStep-1)*_Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), _BID- TrailingStop*_Point,
                                                     OrderTakeProfit(), 0, Blue);
        }      }    }
//-------------------------------------------------------
    if (OrderType() == OP_SELL)  {
      if (OrderOpenPrice()- _AZK > MinProfit*_Point) {
        if (OrderStopLoss() > _AZK+( TrailingStop+ TrailingStep-1)*_Point 
                                                       || OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), _AZK+ TrailingStop*_Point,
                                                      OrderTakeProfit(), 0, Blue);
        }   }   } 
//--------------------------------------------------------------
   }   }  }

L'Expert Advisor funziona con i prezzi di apertura.

La pesca a strascico si chiama così:

if ( UseTrailing_1) {//выключатель трейлинг стопа 1 пары
if(iTime( Symbol_1, TimeFR_1,0)== prevtime) return(0);//ждём появления нового бара
    prevtime = iTime( Symbol_1, TimeFR_1,0);//если появился новый бар , включаемся 
TrailPositions( Symbol_1, Bid1, Ask1, Point1, Magic_1, MinProfit_1,
                                      TrailingStop_1, TrailingStep_1);}
//-------------------------------------------------------------------------------  
 
if ( UseTrailing_2){//выключатель трейлинг стопа 2 пары
if(iTime( Symbol_2, TimeFR_2,0)== prevtime) return(0);//ждём появления нового бара
    prevtime = iTime( Symbol_2, TimeFR_2,0);//если появился новый бар , включаемся 
TrailPositions( Symbol_2, Bid2, Ask2, Point2, Magic_2, MinProfit_2,
                                      TrailingStop_2, TrailingStep_2);}

Tuttavia. La rete a strascico non funziona con questa impostazione.

Se rimuovo la rete a strascico di un simbolo, la rete a strascico di un'altra coppia inizia a funzionare.

Se entrambe le chiamate alla coppia di tracce sono presenti nel codice, nessuna di esse funziona.

Si prega di avvisare. Dove può essere un errore?

 

Devi usare un prevtime diverso per ogni strumento e timeframe.

 

Grazie Vinin!

Stavo giusto per scrivere il mio trawl per ogni coppia....

 

Aiuto con il consulente multi-valuta.

Ho scritto un EA. Apre/chiude simultaneamente gli ordini per due coppie EURUSD <-> GBPUSD. Lo collego a EURUSD. Legge le quotazioni per entrambe le coppie (iOpen). I comandi seguenti vengono eseguiti

Ask_EUR = MarketInfo("EURUSD", MODE_ASK);

Bid_EUR = MarketInfo("EURUSD", MODE_BID);

E questi comandi non vengono eseguiti

Ask_GBP = MarketInfo("GBPUSD", MODE_ASK);

Bid_GBP = MarketInfo("GBPUSD", MODE_BID);

Valori ask = bid = 0

Puoi dirmi qual è il problema?

 
C'è una seconda coppia presente nella finestra MARKET OVERVIEW?