Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 89

 
Omm:

Wie bestimme ich den Zeitpunkt für den Tageshandel mit Futures?

MarketInfo(Symbol(),MODE_STARTING)

MarketInfo(Symbol(),MODE_EXPIRATION)

liefert Nullen


Welcher Makler?

Daher sollten Sie sich zunächst bei Ihrem Makler erkundigen.

 
alexey1979621:
Liebe Forumsmitglieder, wie kann man die Bedingung des Überschreitens der Kanallinie durch den Preis in Ihrem Expert Advisor schreiben, z.B. der Preis überschreitet die Kanallinie von oben und der Handel wird eröffnet oder geschlossen? Bitte beachten Sie, dass ich an dem Zeitpunkt dieses Crossovers interessiert bin. Ich würde gerne helfen.

double price0=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 0),Digits)); - Wert Ihrer Linie auf Takt 0.

double price1=NormalizeDouble(ObjectGetValueByShift("NameYourChannelLine", 1),Digits)); - Wert Ihrer Linie auf Takt 1.

Und die einfachste Art, den Zeitpunkt des Durchbruchs auf dem Null-Balken zu bestimmen: if(High[0]>price0 && High[1]<=price1) {die Linie hat nach oben durchbrochen}, if(Low[0]<price0 && Low[1]>=price1) {die Linie hat nach unten durchbrochen}. Die ifs sind ab dem Zeitpunkt des Durchbruchs bis zum Ende des aktuellen Taktes TRUE. Es ist wünschenswert, dass Ihre Kanalzeile die Eigenschaft OBJPROP_RAY==True hat.

 
alexey1979621:
Liebe Forumsmitglieder, wie kann man eine Bedingung in einem EA für das Überschreiten der Kanallinie erstellen, z.B. wenn der Preis die Kanallinie von oben überschreitet und ein Geschäft eröffnet oder geschlossen wird? Bitte beachten Sie, dass ich an dem Zeitpunkt dieses Crossovers interessiert bin. Ich würde gerne helfen.

Es gibt mehrere Möglichkeiten:

Wenn Ask > Kanallinie und Low[1] <=Kanallinie, Kreuz nach oben

Wenn Bid < Kanallinie und High[1] >=Kanallinie, Kreuzung nach unten

Sie können sich bei MA mit Zeitraum 1

 
Wie kann ich den letzten abgeschlossenen Auftrag in der Software auswählen und Informationen daraus abrufen?
 
Vielen Dank für Ihre Hilfe

. Ich muss die Frage falsch gestellt haben, ich hätte einen Teil des Codes anhängen sollen. Ich nehme das zurück.

Wie von
vorgeschlagen

artmedia70 hat die zu schließende Kreuzung wie folgt angegeben. Damit ist das Geschäft gemäß dem Screenshot abgeschlossen. Aber wir müssen das Geschäft dort abschließen, wo das Kreuz ist

void CheckForClose()
{
double PriceHigh, PriceLow;
//---- go trading nur für die ersten Ticks der neuen Bar
if(Volumen[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) weiter;
//---- Auftragsart prüfen
if(Auftragsart()==OP_BUY)
{
if(Low[1]<=PreisHoch && Ask>=PreisHoch ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
Pause;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PreisTief && Bid<=PreisTief) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Pause;
}
}
//----
}

 
 
webip:
Wie kann man die letzte geschlossene Bestellung in der Software auswählen und Informationen daraus erhalten?

Sie können alles finden, was Sie wollen.
 
alexey1979621:
Vielen Dank für Ihre Hilfe

. Ich muss die Frage falsch gestellt haben, ich hätte einen Teil des Codes anhängen sollen. Ich nehme das zurück.

Wie von
vorgeschlagen

artmedia70 hat die zu schließende Kreuzung wie folgt angegeben. Das Geschäft wird laut Bildschirmfoto abgeschlossen. Aber wir müssen das Geschäft dort abschließen, wo das Kreuz ist

void CheckForClose()
{
double PriceHigh, PriceLow;
//---- go trading nur für die ersten Ticks der neuen Bar
if(Volumen[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);


for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) weiter;
//---- Auftragsart prüfen
if(Auftragsart()==OP_BUY)
{
if(Low[1]<=PreisHoch && Ask>=PreisHoch ) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
Pause;
}
if(OrderType()==OP_SELL)
{
if(High[1]>=PreisTief && Bid<=PreisTief) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Pause;
}
}
//----
}

ExtremeTMA - grässliche Überzeichnung. Es ist ein großes Stück Geschichte - die letzten 30 Takte, wenn nicht mehr. Ich habe es benutzt, um einen Expert Advisor zu schreiben - es ist beschissen. Stellen Sie sich vor: ein Signal erscheint, Sie geben es ein, und einige Zeit später ist dieses Signal nicht mehr in der Historie zu sehen - der Indikator wurde neu gezeichnet und es stellt sich heraus, dass Sie vergeblich in den Markt eingestiegen sind

Sie haben einen Fehler bei der Bestimmung der Kreuzung gemacht: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... Sie sollten schreiben if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... Und für das Gegenteil in Analogie dazu.

Fügen Sie den Code mit der Schaltfläche SRC in das Feld am oberen Rand des Eingabefensters Ihrer Nachricht ein

ZZZY Und wo ist der Screenshot mit dem Kreuz?

 
artmedia70:

ExtremeTMA - sie sind heillos überzogen. Und ein großer Teil der Geschichte - die letzten 30 Takte, wenn nicht mehr. Ich habe es benutzt, um einen Expert Advisor zu schreiben - es ist beschissen. Stellen Sie sich vor: Ich habe ein Signal erhalten, bin eingestiegen, und einige Zeit später ist das Signal nicht mehr in der Historie vorhanden - der Indikator hat zu viele Redraws durchgeführt, und es stellt sich heraus, dass ich vergeblich in den Markt eingestiegen bin

Sie haben einen Fehler bei der Bestimmung der Kreuzung gemacht: if(Low[1]<=PriceHigh && Ask>=PriceHigh ) ... Sie sollten schreiben if(Low[1]<=PriceHigh && Ask>PriceHigh ) ... Und für das Gegenteil in Analogie dazu.

SZY Der Code sollte durch Drücken der Schaltfläche SRC im Feld oben im Texteingabefenster eingefügt werden


Korrigiert, schloss den Handel auf die gleiche Weise wie im Screenshot oben, und sollte dort sein, wo das rote Kreuz ist.

Ich stimme zu, dass ExtremeTMA neu gezeichnet, aber ich denke, es hat keinen Einfluss auf die Suche nach Einstiegspunkten, die Hauptsache ist hier die Filter. Ich habe den TDI-Indikator verwendet. Ich habe beigefügt, was ich gemacht habe (ich habe keine guten Hände, deshalb ist der Expert Advisor ein gutes Projekt ). Ich habe nur ein Problem damit, es dauert etwa 5 Stunden im Tester für 1 Jahr (ich habe irgendwo einen Fehler gemacht). Wenn es nicht schwierig ist, nach Fehlern zu suchen.

extern double  Lots             = 0.1;
extern string Сomment           = "TMA Canal2";
extern int TakeProfit           = 20;     //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss             = 20;     // уровень Stop Loss для покупки;
extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 124;

extern string  Indi             = "ExtremeTMALine";
extern string TimeFrame         = "current time frame";
extern int    HalfLength        = 56;
extern int    Price             = PRICE_CLOSE;
extern double ATRMultiplier     = 2.0;
extern int    ATRPeriod         = 100;
extern bool   Interpolate       = true;
extern double TrendThreshold    = 0.5;
extern bool   Distances         = false;


extern string  Indicatora       = "TradersDynamicIndex";
extern int RSI_Period           = 13;         //8-25
extern int RSI_Price            = MODE_CLOSE;           //0-6
extern int Volatility_Band      = 34;    //20-40
extern int RSI_Price_Line       = 2;      
extern int RSI_Price_Type       = MODE_SMA;      //0-3
extern int Trade_Signal_Line    = 7;   
extern int Trade_Signal_Type    = MODE_SMA;   //0-3
extern bool UseAlerts           = false;

double PriceHigh, PriceLow, SL, TP, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
int ticket;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==3 || Digits ==3) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
         }
      return(0);
}


//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
   
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double PriceHigh, PriceLow, TDIHigh, TDILow, RSIPriceLine, TradeSignalLine;
   int ticket;

//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
   
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0);
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0);
   TDIHigh = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 1, 0); // голубая
   TDILow = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 3, 0); // голубая 
   RSIPriceLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 4, 0); // зеленая
   TradeSignalLine = iCustom (Symbol(), 0, "TradersDynamicIndex", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type,UseAlerts, 5, 0); // красная
   
   
   if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh || Ask>=PriceHigh && TDIHigh > 68 && RSIPriceLine < TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow || Bid<=PriceLow && TDILow < 32 && RSIPriceLine > TradeSignalLine)  

     {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
      return;
     }
//----
  }

  //+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
 
   PriceHigh = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1, 0); 
   PriceLow = iCustom (Symbol(), 0, "ExtremeTMALine", TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2, 0); 
   
   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Low[1]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(High[1]>=PriceLow && Bid<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
   {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
 
alexey1979621:

Korrigiert, den Handel auf die gleiche Weise geschlossen wie im Screenshot oben, aber dort, wo das rote Kreuz sein sollte.

Ich stimme zu, dass ExtremeTMA überzeichnet ist, aber ich schätze, dass dies keinen Einfluss auf die Suche nach Einstiegspunkten hat, die Hauptsache sind hier die Filter. Ich habe den TDI-Indikator verwendet. Ich habe den Tipp beigefügt (meine Hände sind nicht gerade einfach, das Expert Advisor Projekt ist genau wie meine Hände). Ich habe nur ein Problem damit, es dauert etwa 5 Stunden im Tester für 1 Jahr (ich habe irgendwo einen Fehler gemacht). Wenn es nicht schwierig ist, nach Fehlern zu suchen.

Ich habe noch nicht nach Fehlern gesucht - es gibt viel zu tun.

Um Sell dort zu schließen, wo sich das rote Kreuz befindet, müssen Sie den aktuellen Balken überprüfen. Wenn Ask<= Schlussstand && High[1]>Schlussstand