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

 

Normalerweise versende ich Aufträge mit separaten Funktionen. Ich möchte dies optimieren, so dass ich sowohl Pending- als auch Market-Orders mit einer Funktion senden kann.

Bitte beraten Sie mich, wie ich das richtig umsetzen kann?

Beim Senden von schwebenden Aufträgen sollten wir den Eröffnungskurs über (unter) dem Geldkurs prüfen und einige andere Aspekte in Betracht ziehen.

Schauen wir uns an, wie andere es machen. Nehmen wir die einfachste von Kim verwendete Variante:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy);
      // Вывод сообщения об ошибке
      Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  return(ticket);
}

Er prüft überhaupt nichts. Wir sehen, dass seine Funktion nur für die Eröffnung von Marktaufträgen vorgesehen ist.

Ich glaube nicht, dass das logisch ist. Wenn Sie eine Bestellung abschicken, kann es sich um eine beliebige Art handeln. Wenn Sie ihn so schreiben, wie ich denke, wird er auf den ersten Blick zu lang sein.

Generell bitte ich um Hilfe und Hinweise, wie man diese Punkte besser umsetzen kann.

 
hoz:

Normalerweise versende ich Aufträge mit separaten Funktionen. Ich möchte dies optimieren, so dass ich sowohl Pending- als auch Market-Orders mit einer Funktion senden kann.

Bitte beraten Sie mich, wie ich das richtig umsetzen kann?

Beim Senden von schwebenden Aufträgen sollten wir den Eröffnungskurs oberhalb (unterhalb) des Geldkurses prüfen und einige andere Aspekte in Betracht ziehen.

Schauen wir uns an, wie andere es machen. Nehmen wir die einfachste von Kim verwendete Variante:

Er prüft überhaupt nichts. Wir sehen, dass seine Funktion nur für die Eröffnung von Marktaufträgen vorgesehen ist.

Ich glaube nicht, dass das logisch ist. Wenn Sie eine Bestellung abschicken, kann es sich um eine beliebige Art handeln. Wenn Sie ihn so schreiben, wie ich denke, wird er auf den ersten Blick zu lang sein.

Generell bitte ich um Hilfe und Hinweise, wie man diese Punkte besser umsetzen kann.

Nun, die Funktion von Igor erfüllt genau die Aufgabe, die im Funktionsnamen angegeben ist. Alle Einstellungen und Überprüfungen müssen VOR dem Aufruf dieser Funktion durchgeführt werden. Schließlich erfüllt die Funktion selbst nur die ihr zugewiesene Aufgabe - sie öffnet die Position mit den ihr (in die Funktion) übergebenen Parametern und nichts weiter. Es funktioniert perfekt mit allen notwendigen Fehlerbehandlungen. Was noch fehlt - entwickeln Sie es selbst.

Zum Vergleich: Wenn Sie in einem Geschäft Instantkaffee kaufen, werden das kochende Wasser und der Zucker und das automatische Mischen anderer Zutaten nicht angeboten - Sie sollten besser wissen, wie Sie Ihren eigenen Kaffee zubereiten.

 

Leute, ist es möglich,... Bitte unter einer anderen Schleifenbedingung neu schreiben...

Das heißt, es gibt einen wunderbaren bbands_stop Indikator:


for (shift=Nbars-Length-1;shift>=0;shift--)

{

smax[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);

smin[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_LOWER,shift);

if (Close[shift]>smax[shift+1]) trend=1;

if (Close[shift]<smin[shift+1]) trend=-1;


bsmax[shift]=smax[shift]+0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);

bsmin[shift]=smin[shift]-0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);

if (trend>0)

UpTrendBuffer[shift]=bsmin[shift];

else

DownTrendBuffer[shift]=bsmax[shift];

}

Ist es möglich, einen Code zu schreiben, der den Ergebnissen des vorherigen ähnelt? Aber in einer Schleife:

for(i = 0; i <= limit; i++) {

Ich sitze nun schon den zweiten Tag und kann es nicht finden...

 
Hallo alle, natürlich ist die Frage dumm, wie viel ist die Losgröße benötigt, um 1 Pip im Wert von 1 Dollar zu machen?
 
0.1
 
FEAR:
Hallo zusammen, natürlich ist die Frage dumm, wie viel ein Lot sein muss, damit 1 Pip 1 Dollar wert ist.
Das hängt von der Größe des Grundstücks ab.
 
nikelodeon:
0.1
nicht immer
 
PapaYozh:
nicht immer
Je nach Schulter....
 
0,1 bei einer Hebelwirkung von 1:100
 
nikelodeon:
Je nach Schulter....

nikelodeon:
0,1 bei einer Hebelwirkung von 1:100

Die Schultern sind irrelevant, wenn es um den Stil des Artikels geht.