Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 27

 
Movlat Baghiyev:
Die Schließungsbedingung verwendet ein umgekehrtes Signal, aber es funktioniert nicht. yIhre Geschäfte werden nur bei Stop oder Takei geschlossen. Was ist der Grund?

Falsch.
Ihre Bedingung sollte am Anfang stehen und die Schließfunktion nach dem Start.

int i;
// 
void Start(){

if ((FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) // тут так надо бы Bid<NormalizeDouble(FMA1-Distanse*GetPoint(),Digits)
   || (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint())){
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL)  CloseOpBuySell(); // тут закроются все ордера и бай и селл
    }
  }

}// end start

void CloseOpBuySell()

for(i=0;i<OrdersTotal();i++) 
  { 
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
   { 
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic ) //свой магик
    { 
      if(OrderType()==OP_BUY
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,LawnGreen);  {continue;}
        } 
      if(OrderType()==OP_SELL
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,LawnGreen);  {continue;}
        } 
      } 
    } 
  } 
  return;
  }

Wenn Sie unter verschiedenen Bedingungen schließen müssen und nicht alle auf einmal, dann sollte die Schließfunktion anders aussehen.
 
Natashe4ka:

Falsch.
Sie sollten die Bedingung am Anfang und die Schließfunktion am Anfang haben.

Wenn Sie nach einzelnen Bedingungen abschließen müssen und nicht alle auf einmal, dann sollte die Abschlussfunktion anders aussehen.

Richtig, aber ich habe es bereits getan und ihm geschickt, also wird er nichts sagen.

int start()
{
    //закрытие по МА-шкам
   if (FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) CloseOpBuySell("BUY");
   if (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint()) CloseOpBuySell("SELL");
  return(0);
}
//----
//-----------------------------------+

void CloseOpBuySell(string TypeClose)
   {
      for(int i=0;i<OrdersTotal();i++)
         {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
               {
                   if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn )
                      {
                        if(TypeClose=="BUY")
                          {
                              if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,LawnGreen);
                           }
                        if(TypeClose=="SELL")
                          {
                              if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,LawnGreen);
                          }
                     }
               }
         }
   }
 
Renat Akhtyamov,Natashe4ka, vielen Dank.

 
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
So wird das Los berechnet.MaximumRisk==100 . ich möchte, dass das Los automatisch bis zum Maximum berechnet wird.Ich habe MaximumRisk==100 geschrieben, um das maximal mögliche Lot bei Handelseröffnung zu berechnen. Wie oft ist das korrekt?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
Hier ist eine Variante der Losberechnung.MaximumRisk==100: Es muss automatisch für jedes Los berechnet werden.Ich habe MaximumRisk==100 vorgeschrieben, um das maximal mögliche Lot bei Handelseröffnung zu berechnen.

Es ist besser, nach den verfügbaren Mitteln zu rechnen als nach dem Saldo. Andernfalls riskieren Sie, viel mehr zu bekommen, als Sie sich zum Zeitpunkt der Eröffnung eines Geschäfts leisten können.

Sie müssen auch die Abhängigkeit des Lot-Schrittes ausrechnen und dann prüfen, ob das Lot innerhalb der für das Konto zulässigen Höchst- und Mindest-Lots liegt.

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
 
Vitalie Postolache:


Ich hab's. Danke. Mal sehen, was passiert.
 
Vitalie Postolache:

Es ist besser, nach den verfügbaren Mitteln zu rechnen als nach dem Saldo. Andernfalls riskieren Sie, viel mehr zu bekommen, als Sie sich zum Zeitpunkt der Eröffnung eines Geschäfts leisten können.

Sie müssen auch die Abhängigkeit des Lot-Schrittes ausrechnen und dann prüfen, ob das Lot innerhalb der für das Konto zulässigen Höchst- und Mindest-Lots liegt.

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
Diese Option funktioniert nicht so, wie sie sollte... Ein Geschäft mit der maximal möglichen Menge zu öffnen, und nach dem Schließen des zweiten nicht öffnen, schreibt nicht genug Geld...
 

Aufgeschoben:

Gevorg Hakobyan, 2016.12.08 15:26

Hallo. Wie kann ich eine Liste aller vorhandenen Währungspaare in Meta Trader 4 erhalten? Und wie kann ich mich über etwaige Änderungen in der Liste auf dem Laufenden halten?
 
Vladimir Karputov:

Aufgeschoben:

Gevorg Hakobyan, 2016.12.08 15:26

Hallo. Wie kann ich die Liste aller in Meta Trader 4 vorhandenen Währungspaare erhalten? Und wie erfährt man von etwaigen Änderungen in der Liste?

SymboleGesamt

Gibt die Anzahl der verfügbaren (in MarketWatch ausgewählten oder aller) Symbole zurück.

intSymbolsTotal(
bool selected// true - nur Symbole in MarketWatch
);

Parameter

ausgewählt

[in] Anforderungsmodus. Kann die Werte true oder false annehmen.

Zurückgegebener Wert

Wenn selected true ist, wird die Anzahl der in MarketWatch ausgewählten Zeichen zurückgegeben. Wenn false, wird die Gesamtzahl aller Symbole zurückgegeben.

 
Vladimir Karputov:

Aufgeschoben:

Gevorg Hakobyan, 2016.12.08 15:26

Hallo. Wie kann ich eine Liste aller vorhandenen Währungspaare in Meta Trader 4 erhalten? Und wie kann ich mich über etwaige Änderungen in der Liste auf dem Laufenden halten?
Und von dem, was übertragen wird, ist es unmöglich, Code zu schreiben, die plattformübergreifende Arbeit wird, gibt es keinen Unterschied in der Aufgabe, die Symbole in den beiden Plattformen.
Grund der Beschwerde: