[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 67

 

Hallo zusammen.

Ich beschloss, Schriftsteller zu werden. Ich wollte etwas in MQL4 schreiben. Ich habe etwas darüber gelesen und beschlossen, einen Expert Advisor zu schreiben, der eine Position öffnen würde, wenn der RSI mit Periode 8 70 überquert und die Position schließen würde, wenn 30 überquert und nichts anderes passieren würde. Ich habe es geschrieben, hier ist der Code

//+------------------------------------------------------------------+
//| 4doc.mq4 |
//| (Alex)
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Alex"
#property link "http://www.metaquotes.net"

//---- Eingabeparameter
extern int PerRSI=8;
extern intNamber=77771;

extern double Lots=1.0;

/+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
Ticket,
insgesamt;
doppelt
rsi_0, //Wert. rsi_0 aktuell
rsi_1; // Wert. rsi_1 1. Balken
wenn (Balken<100)
{
Print("Balken kleiner als 100");
zurück(0);
}
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Aktueller Balken
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Aktueller Balken plus 1
total=AuftragsSumme();
if(gesamt<1)
if(rsi_0 < rsi_1 && rsi_0 > 70) // Wenn die Linie 70 überschritten hat
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My RSI", MagicNamber,0,Green);
if(Ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice())
}
else Print("Fehler bei der Eröffnung einer SELL-Order: ",GetLastError());
zurück(0);
}
for(cnt=0;cnt<Gesamt;cnt++)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // ist dies eine offene Position? OP_BUY oder OP_SELL
OrderSymbol()==Symbol()) // Werkzeugübereinstimmung?
{
if(OrderType()==OP_SELL) // Position ist offen
{
if(rsi_0 > rsi_1 && rsi_0 < 30) // Wenn die Linie 30 überschritten hat
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // Position schließen
return(0); // exit

}}}}}

Ich habe es getestet und es funktioniert größtenteils so, wie ich es wollte . Ich habe beschlossen, den Code so zu ändern, dass eine Position eröffnet wird, wenn der SSI - 14 den Wert 100 überschreitet, und dass eine Position geschlossen wird, wenn den Wert 100 überschreitet. Ich änderte RSI Code für CCI , hier ist es.

//+------------------------------------------------------------------+
//| CCI-DOC.mq4 |
//| (Alex)
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Alex"
#property link "http://www.metaquotes.net"

//---- Eingabeparameter
extern int PerCCI=14;
extern inttern MagicNamber=88881;

extern double Lots=1.0;

//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
Ticket,
insgesamt;
doppelt
cci_0, // cci_0 Wert. cci_0 aktuell
cci_1; // cci_1 Wert. cci_1 1. Balken
wenn (Balken<100)
{
Print("Balken kleiner als 100");
zurück(0);
}
cci_0=iRSI(NULL,0, PerCCI,0,0); // Aktueller Balken
cci_1=iRSI(NULL,0, PerCCI,0,1); // aktueller Balken plus 1
total=AuftragsSumme();
if(gesamt<1)
if(cci_0 < cci_1 && cci_0 > 100) // if(Linie hat 100 überschritten
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My CCI", MagicNamber,0,Green);
if(Ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice())
}
else Print("Fehler bei der Eröffnung einer SELL-Order: ",GetLastError());
zurück(0);
}
for(cnt=0;cnt<Gesamt;cnt++)
{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // ist dies eine offene Position? OP_BUY oder OP_SELL
OrderSymbol()==Symbol()) // Werkzeugübereinstimmung?
{
if(OrderType()==OP_SELL) // Position ist offen
{
if(cci_0 > cci_1 && cci_0 < -100) // wenn die Linie -100 überschritten hat
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // Position schließen
return(0); // exit
}}}}}

Begann zu testen CCI ..... gut, nichts passiert, nicht verkaufen oder kaufen, keine Fehler im Protokoll, am Ende des Tests öffnet Kurvenchart, aber es ist nicht CCI, aber RSI 70-30 mit Zeitraum 14..... Vielleicht versteht einer der erfahrenen Autoren, warum das so ist und wie man es beheben kann.

 
pepsi писал(а) >>
Dann zeigt die Demo im Protokoll alles noch deutlicher. Es ist klarer, wo der Fehler zu suchen ist. Auf eigene Faust...

>> Danke

 

Hallo wieder!!!!!!!

Ich möchte Sie /nicht aufdringlich/;-)) an Ihre Frage zu p erinnern. 64 über die Handelsbedingungen für MA... vielen Dank im Voraus (für einen Tritt in den Hintern für einen Dummkopf)

 

Meine Herren, können Sie mir sagen, ob ich mehrere verschiedene Zeitdiagramme desselben Handelsinstruments im Terminal verwenden kann?

Wie wird der Verkehr durch das Programm genutzt? Wird der Verkehr des minimalen Zeitrahmens oder der Verkehr aller Zeitrahmen verbraucht?

 
igrok2008 >> :

Hallo wieder!!!!!!!

Ich möchte Sie /nicht aufdringlich/;-)) an Ihre Frage zu p erinnern. 64 über die Handelsbedingungen für MA... vielen Dank im Voraus (für den Tritt in den Hintern für die Dummies)

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);

    перед использованием в коде open_1 или  open_0 их нужно инициализировать, т. е. объяснить программе
    к виду каких данных эти опены относятся( целые, дробные, строчные, логические)

    double open_0=Open[0]; //  double - дробное число. 0 и 1 это номера ячееек,
    double open_1=Open[1]; // которые в данном случае являются номерами баров
        
    if( MA_1< Open[1] && MA_0>Open[0])
     if( CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if( MA_1>Open[1] && MA_0<Open[0])
     if( CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
 
KONDOR >> :

Danke für die Antwort!!!

1. Lassen Sie mich klarstellen, müssen die beiden Zeilen mit double open_0 und double_1 VOR den doppelten MA-Zeilen geschrieben werden, oder ist es unkritisch ??????...

2. In den Handelsbedingungen können Sie open[0,1] durch open_0,1 ????????..... ersetzen.

 
igrok2008 >> :

Danke für die Antwort!!!

1. Lassen Sie mich klarstellen, müssen die beiden Zeilen mit double open_0 und double_1 VOR den doppelten MA-Zeilen geschrieben werden, oder ist es unkritisch ??????...

2. Sie können open[0,1] durch open_0,1 ersetzen ????????.....

1. nicht kritisch.

2. kann

 

Hilfe bitte... Vielleicht bin ich faul, aber ich kann nicht herausfinden, wie ich das Programm mit einem Demo- oder Realkonto verbinden kann... Bitte erklären Sie mir, was ich schreiben und wo ich singen soll, ich flehe Sie an... vielen Dank im Voraus!))

 
Ich schrieb - ich schrieb, ich in der Tester gehandelt, aber auf der Demo oder real nicht wollen, um Transaktionen zu tun, und im Allgemeinen gibt es keine Signale, obwohl sie da sein sollte(((
 
keekkenen >> :

1. nicht kritisch

2. kann

CGFCB<J d.h. DANKESCHÖN!!!!