[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 227

 
drknn:

Erhöhen Sie den Schlupf. Die Geschäfte müssen in einem schnellen Markt eröffnet worden sein. Es passiert manchmal nach wichtigen Nachrichten, dass die Eurobucks so schnell in 1-2 Ticks sind, dass es ein Alptraum ist. Und während der Server den Auftrag des EA verarbeitet, ändert sich der Preis sehr abrupt.


Ich befürchte, dass die DT, wenn die Abweichung immer groß ist, anfangen könnte, sie systematisch zu missbrauchen. Es wäre wünschenswert, sie dynamisch zu "verschieben" - allerdings nur, wenn der Preis auf dem Server besser ist als der, zu dem die Bestellung abgeschickt wurde. Es wäre ähnlich wie beim manuellen Bieten - wenn der gewünschte Preis nicht mehr verfügbar ist, wird ein neuer angeboten, der durch Drücken von OK akzeptiert oder abgelehnt werden kann - natürlich nur, wenn es sich um dieselbe Situation handelt.

 

Hallo zusammen! Bitte helfen Sie mir, die folgenden Dinge zu kombinieren. Das Ergebnis sollte sein: zwei Linien, die dem Kurs folgen, eine um 20 Pips niedriger als Ask..,

Außerdem erhalte ich einen Signalton, wenn sich der Preis um 20 Punkte pro 1 Tick ändert.

Alles funktioniert auch einzeln gut. Vielen Dank im Voraus!

1) Die Linie unterhalb des Ask um 20 Pips.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask-20*Point);
return(0);
}

//+------------------------------------------------------------------+

2) Die Linie liegt 20 Pips über dem Ask.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+

3) Preisänderungsrate im Zeitverlauf.

#property show_inputs

extern int pips=2; //изменение аск
extern double Time_=0.1; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize(Ask_save,количество_символов);
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}
if(!все_из_обзора_рынка){
количество_символов=1;
ArrayResize(Ask_save,количество_символов);
ArrayResize(val,количество_символов);
val[0]=Symbol();
}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим

Alert("пересчитаем через "+Time_+" сек.");

for(i=0;i<количество_символов;i++){//посчитаем стоимость спреда для инструментов из обзора рынка
if((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert(val[i]+","+Period()+" изменился вниз на "+DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)),0)+" pips");
PlaySound("timeout.wav");
}
if((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert(val[i]+","+Period()+" изменился вверх на "+DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]),0)+" pips");
PlaySound("email.wav");
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep(Time_*1000);//пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){Comment("");}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList(string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if(Selected) SymbolsFileName = "symbols.sel"; else SymbolsFileName = "symbols.raw";
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
if(hFile < 0) return(-1); if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116; }
else { SymbolsNumber = FileSize(hFile) / 1936; Offset = 1924; }
ArrayResize(Symbols, SymbolsNumber);
if(Selected) FileSeek(hFile, 4, SEEK_SET);
for(int i = 0; i < SymbolsNumber; i++){Symbols[i] = FileReadString(hFile, 12); FileSeek(hFile, Offset, SEEK_CUR);}
FileClose(hFile);
return(SymbolsNumber);
}
 
Vovo4ka:

Als ob ein kluger Petrosianer einen Scherz machen wollte...))

Das tut mir leid, das Geld gehört Ihnen. Je mehr von Ihnen, desto besser geht es uns.
 
ScioMe:

MetaEditor verfügt über einen Standard-iMA-Indikator. Sie können es gerne verwenden :)
Bitte sagen Sie mir, wo ich es bekommen und wo ich es einbauen kann, ich bin immer noch ein kompletter Dummie...
 
Vovo4ka:
Leute! Ich versuche zu machen, dass je nach Risiko.... viel gehandelt werden würde, was nicht herauskommt....schreibt

Bitte teilen Sie uns mit, wo der Fehler liegt....

Haben Sie nur einen einzigen Auftrag der richtigen Art in Ihrer Handelshistorie?

if(OrderProfit()>0) break;

Wenn es einen Auftrag gibt, der mit Gewinn abgeschlossen wurde, steigen wir aus der Schleife aus und überprüfen den Rest der Historie nicht...

int    orders=HistoryTotal();     // history orders tota l

Ist das Ihre eigene Funktion? OrdersHistoryTotal()?

Ich bin verwirrt, wenn ich nach der Anzahl der verlorenen Aufträge suche. Wenn Sie den letzten abgeschlossenen Auftrag benötigen, wo ist der Scheck für den letzten Auftrag?

Hier ist die Hausaufgabe für Ihre eigene Analyse:

int losses=0;
for (int i=0; i<OrdersHistoryTotal(); i++) {                // Цикл по истории терминала
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {         // Если ордер выбран ...
      if (OrderSymbol()!=Symbol())     continue;            // Если символ ордера не наш -  к следующему ордеру
      if (OrderType()>OP_SELL)         continue;            // Если тип ордера не наш -     к следующему ордеру
      if (OrderMagicNumber()!=Magic)   continue;            // Если магик ордера не наш -   к следующему ордеру
      if (OrderProfit()>=0)            continue;            // Если профит ордера в плюсе - к следующему ордеру
      if (OrderProfit()<0)                                  // Ордер закрыт в минусе ...
         losses++;                                          // Увеличиваем счётчик убыточных ордеров      
      }
   else if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {   // Если не удалось выбрать ордер ...
      Print("Error in history! ", GetLastError());          // Сообщим об ошибке и посмотрим её код
      break;                                                // Прерываем цикл перебора ордеров
      }
   }

Und noch eine Sache:

if(ldlot<0.1) ldlot=0.1;

Kann es trotzdem besser sein, die Prüfung für weniger als das minimal Zulässige durchzuführen?

double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (ldlot<MinLot) ldlot=MinLot;

Und ist sie gleichzeitig größer als der Höchstwert (wenn die Losgröße an die Funktion übergeben wird)?

double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);
if (ldlot>MaxLot) ldlot=MaxLot;
 
doon:

Danke, aber Sie müssen trotzdem einen Zettel einwerfen.

Ich verstehe das nicht, warum brauchen Sie es dort? Ich denke, das ist ziemlich einfach.
 
ZZZEROXXX:


Ich befürchte, dass die DC bei einem hohen Slippage-Betrag anfangen könnten, diesen systematisch zu missbrauchen.

Wenn die DC anfängt, sie zu missbrauchen, hilft nichts mehr. Hier ist eine weitere Möglichkeit, die funktionieren könnte. Wenn Ihr Maklerunternehmen gleitende Spreads hat, ist es besser, die Funktion mit automatischer Bestimmung der Spread-Größe zu verwenden, und die Slippage sollte auf drei Spreads eingestellt werden. Der Schlupf wird sich dann dynamisch verändern.
 
Sagen Sie mir, wenn ich mit Aufträgen durch Ticket, wie eine Variable (int Ticket), als statische lokale oder wie üblich global oder im Allgemeinen, wie üblich lokal zu schreiben? Ich bin verwirrt. Ich danke Ihnen.
 
Fam:
Bitte beraten Sie, wenn wir mit Aufträgen nach Ticket arbeiten, wie die Variable (int Ticket) korrekt zu schreiben, als eine statische lokale oder als eine reguläre globale oder allgemein als eine reguläre lokale? Ich bin verwirrt. Ich danke Ihnen.

Es hängt alles davon ab, ob diese Variable allen EA-Funktionen zur Verfügung steht (nun ja... nicht allen, aber sicher einigen). Dann ist die Variable global.

Wenn sie nur in einer Funktion verwendet wird, ist sie lokal.

Die Frage ist, in welches Wasser man die Blumen stellen soll, in normales oder gesüßtes Wasser" ... Während du rätst, werden die Blumen im Bad zu einem Besen... :))

 
ZZZEROXXX:


Ich befürchte, dass die Gleichstellungsbeauftragten, wenn die Schlupfquote immer hoch ist, sie systematisch missbrauchen könnten. Ich möchte ihn dynamisch "verrutschen" - nur wenn der Preis auf dem Server besser ist als der Preis, zu dem der Auftrag gesendet wurde. Es wäre ähnlich wie beim manuellen Bieten - wenn der gewünschte Preis nicht mehr verfügbar ist, wird ein neuer angeboten, der durch Drücken von OK akzeptiert oder abgelehnt werden kann - natürlich nur, wenn es sich um dieselbe Situation handelt.

Versuchen Sie zunächst , den Slippage von der Volatilität abhängig zu machen. In einem ruhigen Markt wird er minimal sein, in einem schnellen Markt wird er sich weiter ausbreiten.