Schließung von Positionen. Anzeigesignal. - Seite 8

 
Lukyanov:

Reingewinn 6157.73


Sergey, ein Gewinn von 6000 Dollar bei 6.000 bis 9.000 Transaktionen.

1. Was ist das MOJ?

2. 1.500 Abschlüsse pro Tag - welcher Broker kann das verkraften?

 

Guten Abend, allerseits! Es gibt ein weiteres Problem. Bitte sagen Sie mir, ob Sie wissen, wie man den Ausdruck schreibt

hann = iCustom(.... .... .... ) für Indikator

Zumindest in seiner grundlegendsten Form - zum Einstellen von Lb-Parameter und Taktnummer...

/+------------------------------------------------------------------+
//|                                                          SSL.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
//----
#property indicator_buffers 1
#property indicator_color1 Blue
extern int Lb=10;
double ssl[],Hld,Hlv;
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ssl);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {   return(0);  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
//----
   for(int i=Bars-Lb;i>=0;i--)     {
      if(Close[i]>iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1))
         Hld=1;
      else        {
         if(Close[i]<iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1))
            Hld=-1;
         else
            Hld=0;
        }
      if(Hld!=0)
         Hlv=Hld;
      if(Hlv==-1)
         ssl[i]=iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1);
      else
         ssl[i]=iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Hier ist die Tabelle -
 
rid:

Guten Abend, allerseits! Es gibt ein weiteres Problem. Bitte helfen Sie, wer kann - einen Ausdruck schreiben

hann = iCustom(.... .... .... ) für Indikator

iCustom( Symbol(), Period(), "SSL", indLb, 0, bar );
 

Herzlichen Dank, Komposter.

 

Guten Tag. Bitte beraten Sie mich.

In mt4 ist ein Force-index Indikator installiert. Sie ist bipolar, mit einer Mittellinie bei t.0.

Hier ist der Code.

#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int ExtForcePeriod=13;
extern int ExtForceMAMethod=0;
extern int ExtForceAppliedPrice=0;
//---- buffers
double ExtForceBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string sShortName;
   SetIndexBuffer(0, ExtForceBuffer);
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
//---- name for DataWindow and indicator subwindow label
   sShortName="Force("+ ExtForcePeriod+")";
   IndicatorShortName( sShortName);
   SetIndexLabel(0, sShortName);
//---- first values aren't drawn
   SetIndexDrawBegin(0, ExtForcePeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Force Index indicator                                            |
//+------------------------------------------------------------------+
int start()
  {
   int nLimit;
   int nCountedBars=IndicatorCounted();
//---- insufficient data
   if(Bars<= ExtForcePeriod) return(0);
//---- last counted bar will be recounted
   if( nCountedBars> ExtForcePeriod) nCountedBars--;
   nLimit=Bars- nCountedBars;
//---- Force Index counted
   for(int i=0; i< nLimit; i++)
      ExtForceBuffer[ i]=Volume[ i]*
(iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i)-
iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i+1));
//---- done
   return(0);
  }


Allerdings. Meine Aufgabe ist es, den Indikator in seiner Gesamtheit im positiven (oder negativen, egal) Bereich zu zeichnen.

Um es programmatisch zu tun.

D.h. nicht so: double force=(iForce+10), sondern programmatisch!

Wer weiß, was man zu diesem Zweck in den Code einfügen muss?

 
rid >> :

Allerdings. Ich möchte, dass der gesamte Indikator im Plusbereich (oder Minusbereich, was auch immer) gezeichnet wird.

Bitte sagen Sie mir, wer weiß, was ich dem Code dafür hinzufügen sollte?

IMHO ist der sigmoidale Umschlag das, was Sie brauchen. Der Puffer hat Werte von 0 bis 1.

for(int i=0; i< nLimit; i++)
      ExtForceBuffer[ i]=Volume[ i]*
(iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i)-
iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i+1));

//заменяем на 

for(int i=0; i< nLimit; i++)
{
         ExtForceBuffer[ i]=Volume[ i]*
   (iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i)-
   iMA(NULL,0, ExtForcePeriod,0, ExtForceMAMethod, ExtForceAppliedPrice, i+1));

   ExtForceBuffer[ i] = Sigmoid( ExtForceBuffer[ i]);
}

//...

double Sigmoid(double x)
{
   double value = MathExp( x);
   return ( value/(1 + value))
}
 

Vielen Dank, TheXpert! Ich werde es ausprobieren.

//gzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.

Es hat geklappt!

 

Guten Tag zusammen. Ich möchte meinen ersten EA erstellen, aber ich weiß nicht, wie ich den Code schreiben soll. Die Geschäfte werden am MA eröffnet. Wenn der Kurs den MA von oben berührt, dann kaufen. Fällt er darunter, ist er zu verkaufen. Die Neigung der MA sollte berücksichtigt werden. Die Neigung der MAs und die Eröffnung des Auftrags sollten unidirektional sein. Ich danke Ihnen.

 
Shu писал(а) >>

forschung ist faszinierend! sie ist sogar gut für das gehirn und zum experimentieren. ich begrüße und respektiere das.

Alle Fahrräder und Motorräder wurden bereits vor uns erfunden (durchgestrichen) - packen Sie alle Bestellungen in Ihr eigenes Array (vielleicht auch mehrere) und machen Sie damit, was Sie wollen. Sie können sie nach beliebigen Kriterien sortieren, löschen (das Ticket ist Ihr Freund) oder ändern (es ist einfach, Änderungen an Stoplosses/Takeprofits vorzunehmen oder neue Aufträge zu erstellen).

ps (noch eine Sache). Wenn Sie sich entschließen, Ihre Kreation ernst zu nehmen, denken Sie daran, dass die Verbindung mit Ihrem Maklerunternehmen jede Sekunde (Millisekunde) unterbrochen werden kann. Die ideale Lösung besteht darin, den Expert Advisor in die Lage zu versetzen, die Notwendigkeit der Schließung bestimmter Aufträge (in diesem Fall) nach einem Notstopp/einer Abschaltung zu erkennen und diese zu schließen.

Allerdings sind die meisten der öffentlich verkauften "Grals" in Form von P.C. - sind ähnlich spielzeugartig...

Das mit den Arrays verstehe ich nicht ganz. Aber die zweite Idee - dass der Experte, wenn er das Signal zum Schließen verpasst, immer noch in der Lage sein wird, die Notwendigkeit des Schließens zu begreifen - gefällt mir. Aber wie macht man das?

 

Nachmittags.

EA platziert Limit by Limit Orders, die der Preisbewegung folgen, bei Distanz =Distance.

Ich muss übermäßige (am weitesten entfernte) Aufträge löschen, wenn sich der Preis nach oben bewegt.

Ich habe es getan. Aber aus irgendeinem Grund funktioniert es nicht richtig! Der erste Auftrag wird normal gelöscht. Dann werden im Gegenteil die, die dem Preis am nächsten kommen, gestrichen! Dann hören sie auf oder werden "aus heiterem Himmel" gelöscht, und das Protokoll erzeugt den Fehler 4108 (unbekanntes Ticket). Dann werden sie für einige Zeit normal gelöscht.

Ich glaube, es wurde irgendwo gesagt, dass es wichtig ist, die Suche nach Aufträgen richtig anzuordnen.

//жжжжж Удаление лишних байлим ордеров жжжжжжжжж
if( NumberOfOrders(NULL,OP_BUYLIMIT, MAGIC)> КоличествоОрдеров  )  {
    //если ордеров больше заданного значения 
//for (int z = OrdersTotal() - 1; z >= 0; z -- )  {//перебираем с "конца"
  for ( int z=0;    z<OrdersTotal();        z++)  {//перебираем с начала         
  if (OrderSelect( z, SELECT_BY_TICKET, MODE_TRADES))          {//перебираем по тикету           
   if (OrderSymbol()==Symbol()&& OrderType() == OP_BUYLIMIT) {//выбираем байлимиты   
     if ( OrderOpenPrice() <(Ask-( КоличествоОрдеров* Дистанция)*Point) ) {
     //если расстояние от тек. цены больше заданного
   
   OrderDelete(OrderTicket(),Yellow);   //  return(0);    //удаляем самый дальний
            }}}}} 

Allerdings. Unabhängig davon, ob der Auftragsabruf "vom Ende" oder vom Anfang her erfolgt. Das Ergebnis ist falsch.

Der Code scheint der einfachste zu sein!

Was kann hier falsch sein? Bitte um Rat!

Grund der Beschwerde: