[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 253

 
granit77:
Gesetzt:

qaz2005 11.10.2011 09:30
Guten Tag zusammen! Bitte beraten Sie, es gibt einen benutzerdefinierten Indikator, es hat zwei Objekte. Ihre Werte kann ich herausfinden, aber es gibt keine Möglichkeit, sie zu unterscheiden, ob es sich um die obere oder die untere Zeile handelt. Ich kann die Anzahl und Reihenfolge der Puffer nicht wissen, bei der Installation gibt es keine Einstellungen. Im Internet gelesen, dass die Einstellungen für die Farbe auch als Puffer gehen, wie man sie durch die Funktion iCustom () oder vielleicht eine andere Funktion, um diesen Punkt zu arbeiten beziehen?

Vielen Dank im Voraus!

P.S. Gibt es Literatur über die Sprache MQL4? Ich habe bereits ein MQL4-Tutorial heruntergeladen und fast abgeschlossen.

Puffernummern werden von "0" an gezählt,

iCustom(NULL, 0, "ind",150, 0,2);

wobei 150 der Zeitraum ist,

0 ist Puffer,

2 ist ein Balken.

https://docs.mql4.com/ru/indicators/iCustom

z.B..

#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

also höchstwahrscheinlich blau = 0 Puffer

und rot = 1

 
skyjet:
Alexander, vielen Dank, dass Sie Ihre Erfahrungen mit uns teilen! Aber auf dem Weg dorthin habe ich eine Frage: Wie erfolgt die Aufzählung der Währungen? Oder ist es der Name der Währung in der OrderSend() f-i anstelle von Symbol()? Und könnten Sie bitte erklären, wie man Ihr Beispiel in den Code einfügt? Nochmals vielen Dank für Ihre Hilfe! :)

Roman, grundsätzlich erklärt.

Setzen Sie überall dort, wo im Expert Advisor Symbol() angegeben ist, zum Beispiel: SymbolMax[nnnn]. In OrderSend() sieht es folgendermaßen aus

tick=OrderSend(SymbolMax[nnnn],OP_BUYSTOP,L,ur,0,sl,tp,CMM,MAGIC[I],0,Red);

Ich habe es in meinem Expert Advisor geschrieben, und Sie legen dort Ihre eigenen Werte fest. Sie können z. B. die Liste der Währungen festlegen:

string SymbolMax[4] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};

Vielleicht hat es jemand auf eine andere Weise implementiert, aber dies ist meine Währungssuche - siehe Code unten. Ich setze Start an den Anfang der Funktion. Außerdem habe ich eine 5-Sekunden-Verzögerung eingebaut, um zu verhindern, dass die Nachrichten hin und her springen.

if(nnnn<24) nnnn+=1; else nnnn=0;
 


Ich habe ein Problem mit einer Änderungsschleife,

die Änderung wird als benutzerdefinierte Funktion dargestellt
Das Interessanteste ist, dass die Standard-Schleppnetzfunktion mit beiden Funktionen funktioniert und ich es alleine gut hinbekomme, aber wenn ich eine Fraktalmodifikation mit Breakeven verwende, bekomme ich endlose Modifikationen mit Fraktal und Breakeven

die Änderung basiert auf https://book.mql4.com/ru/trading/ordermodify

Ich habe den Eindruck, dass das Kriterium für die Änderung von Breakeven nicht richtig eingestellt ist. Wie kann ich es so einstellen, dass es nicht einfriert?




//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
 

Hallo liebe Forumsnutzer.

Wie kann ich Angebote für andere Zeiträume anfordern? Ich habe eine Vorlage auf D und mein Indikator benötigt Kurse LOW, HIGH, OPEN, CLOSE von kleineren Zeitrahmen (M30, H1, H4 zum Beispiel).

 
Slava2007:

Hallo liebe Forumsnutzer.

Wie kann ich Angebote für andere Zeiträume anfordern? Ich habe eine Vorlage auf D und mein Indikator benötigt Kurse LOW, HIGH, OPEN, CLOSE von kleineren Zeitrahmen (M30, H1, H4 zum Beispiel).

https://docs.mql4.com/ru/series
 

Guten Abend alle. sagen Sie mir, was ist der Fehler hier. hier ist ein Stück Code.

//+------------------------------------------------------------------+
//| Startfunktion |
//+------------------------------------------------------------------+
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();

if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- IN DIESER ZEILE IST FEHLER!!!
CloseAfterSomeBar (CountBar, OrderTicket());
}

}

 
isaev-av:

Guten Abend, alle. Bitte sagen Sie mir, was der Fehler ist hier. hier ist ein Stück Code.

//+------------------------------------------------------------------+
//| Startfunktion |
//+------------------------------------------------------------------+
void start()
{
//---- check für Geschichte und Handel
if(Bars<100 || IsTradeAllowed()==false) return;
//---- berechnet offene Aufträge nach aktuellem Symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
sonst CheckForClose();

if (!IfTrueThenCountBarWork) return (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- IN DIESEM STRICH SPRICHT FEHLER!!!
CloseAfterSomeBar (CountBar, OrderTicket())
}

}

Fehlendes Zeichen ";"
 

PapaYozh:
Пропущен символ ";"

Danke!!! Ich habe es zuerst nicht bemerkt.)))


 

Noch eine Frage an die Experten. wie kann man die Eröffnungsbedingung korrekt eingeben: Close[2]<Close[3] um n Prozent für sell. für buy natürlich das Gegenteil. und n kann optimiert werden? danke im Voraus!

void CheckForOpen()
{
double ma;
int res;
//---- nur für die ersten Ticks des neuen Balkens handeln
if(Volume[0]>1) return;
//---- gleitenden Durchschnitt ermitteln
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0)
//---- Verkaufsbedingungen
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,",MAGICMA,0,Red);
return;
}
//---- Kaufbedingungen
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,",MAGICMA,0,Blue);
return;
}

 

Sagen Sie mir, was ich falsch gemacht habe, bitte... oder wenn es MT4 selbst, aber meine Kauf-Aufträge öffnen nur auf High bar, und Verkaufsaufträge nur auf Close bar =) Obwohl ich diese Bedingungen nicht einmal im Code des Expert Advisors festgeschrieben habe =)

 extern int TP = 200; 
     extern int TS = 50; 
     extern int TF = 1; 
     extern double lots = 0.1; 
     extern int Pips = 15; 
     extern int MaxPips = 100; 


     int slip = 3; 
     int Magic = 2; 
     int cnt,ticket,total; 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 

 int start() 
    { 
  //---- 

 static double PriceOld = 0.0; 
 double PriceNow; 
 PriceNow = NormalizeDouble(Bid,6); 

 total = OrdersTotal(); 
 if(total < 1) 
 { 
    if((PriceNow-PriceOld)>=Pips*Point && (PriceNow-PriceOld)<MaxPips*Point) 
    { 
           ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,0,0,Magic,0,Green); 
           if(ticket>0) 
               { 
                  OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES); 
                  Print("Ордер на покупку успешно открыт по цене:" ,OrderOpenPrice()); 
               } 
               else 
               { 
                  Print("Ордер не открыт по причине:" ,GetLastError()); 
                  return(0); 
               } 
     } 

 if((PriceNow-PriceOld)<=(-Pips)*Point && (PriceNow-PriceOld)>(-MaxPips)*Point) 
     { 
           ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,0,0,Magic,0,Red); 
           if(ticket>0) 
               { 
                  OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES); 
                  Print("Ордер на покупку успешно открыт по цене:" ,OrderOpenPrice()); 
               } 
               else 
               { 
                  Print("Ордер не открыт по причине:" ,GetLastError()); 
                  return(0); 
               } 
     } 
 } 
return(0);
}