Frage zum Berater für mehrere Währungen - Seite 13

 

Guten Morgen!

Bitte beraten Sie mich. Auf diese Weise werden Positionen für jedes Paar im Multiwährungs-EA eröffnet.

//ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ
//-------------------------Изначальная позиция ----------
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);
   } } 
//ЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ

Bitte beraten Sie mich. Wie kann ich anstelle dieses Blocks eine eigene Funktion schreiben?

Ich muss diesen Block also nicht für jedes Paar neu schreiben?

(Der Block verwendet das fi von I.Kim und das Eröffnungs-fi von Market Watch).

 
Rita писал(а) >>

Guten Morgen!

Bitte beraten Sie mich. Auf diese Weise werden Positionen für jedes Paar im Multiwährungs-EA eröffnet.

Bitte beraten Sie mich. Wie kann ich anstelle dieses Blocks eine eigene Funktion schreiben?

Ich muss diesen Block also nicht für jedes Paar neu schreiben?

(Ich habe I.Kims fi und Market Watch opening fi unter den Bedingungen der Ausführung von Marktaufträgen verwendet).

void FUN(string _Symbol){

// Ihr Code, aber unter Verwendung von _Symbol anstelle eines Symbols

}

 

Ich danke Ihnen. Was ist mit Geboten, Nachfragen, Delta, Lots und bool TRADE (das ist die Eingabeerlaubnis) für jedes Paar?

Wäre das richtig? -

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

Auch. Ich glaube, beiläufig gehört zu haben, dass es falsch ist, eine benutzerdefinierte Funktion innerhalb einer anderen zu verwenden (aufzurufen).

Und ich verwende eine Funktion in einem Block, um Positionen bei der Ausführung von Marktaufträgen zu eröffnen 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);}
Wird es nicht zu Problemen und Fehlfunktionen kommen?
 
Rita писал(а) >>

Ich danke Ihnen. Was ist mit Geboten, Nachfragen, Delta, Lots und bool TRADE (das ist die Eingabeerlaubnis) für jedes Paar?

Wäre das richtig? -

Auch. Ich glaube, beiläufig gehört zu haben, dass es falsch ist, eine benutzerdefinierte Funktion innerhalb einer anderen zu verwenden (aufzurufen).

Und ich verwende in meinem Block die Funktion zur Eröffnung von Positionen unter den Bedingungen der Ausführung von Marktaufträgen Market Watch

Wird es keine Probleme und Fehlfunktionen geben?

double _Bid=MarketInfo(_Symbol, MODE_BID);

double _Ask=MarketInfo(_Symbol, MODE_ASK);

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

Die Anruffunktion kann sich an einem beliebigen Ort befinden. Es wird keine Probleme geben.

 
GUT. Ich danke Ihnen.
 

Guten Tag!

Ich verwende ein Schleppnetz in einem LKW mit mehreren Währungen. Es ist folgendermaßen:

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);
        }}} 
//---------------------------------------------  
 }   }  }

Um die Suche nach allen Paaren von Mehrfachwährungen zu ermöglichen, habe ich sie folgendermaßen umgestaltet.

(Bid-Asking-Points werden über MarketInfo(Symbol_1,MODE_ASK) aufgerufen;

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);
        }   }   } 
//--------------------------------------------------------------
   }   }  }

Der Expert Advisor arbeitet mit Eröffnungskursen.

Das Schleppnetz wird so genannt:

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);}

Allerdings. Mit dieser Einstellung funktioniert das Schleppnetz nicht.

Wenn ich das Schleppnetz eines Symbols entferne, beginnt das Schleppnetz eines anderen Paares zu funktionieren.

Wenn beide Spurpaaraufrufe im Code vorhanden sind, funktioniert keiner von ihnen.

Bitte beraten Sie mich. Wo kann es sich um einen Fehler handeln?

 

Sie müssen für jedes Instrument und jeden Zeitrahmen eine andere Vorzeit verwenden.

 

Vielen Dank , Vinin!

Ich wollte gerade mein eigenes Schleppnetz für jedes Paar schreiben....

 

Hilfe mit dem Berater für mehrere Währungen.

Ich habe einen EA geschrieben. Es öffnet/schließt gleichzeitig Aufträge für zwei Paare EURUSD <-> GBPUSD. Ich verbinde ihn mit EURUSD. Liest Anführungszeichen für beide Paare (iOpen). Die folgenden Befehle werden ausgeführt

Ask_EUR = MarketInfo("EURUSD", MODE_ASK);

Bid_EUR = MarketInfo("EURUSD", MODE_BID);

Und diese Befehle werden nicht ausgeführt

Ask_GBP = MarketInfo("GBPUSD", MODE_ASK);

Bid_GBP = MarketInfo("GBPUSD", MODE_BID);

Werte ask = bid = 0

Können Sie mir sagen, was los ist?

 
Gibt es ein zweites Paar im Fenster MARKTÜBERSICHT?