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

 
CLAIN:

Genossinnen und Genossen, helft bitte... Ich habe einen einfachen Code geschrieben, aber beim Kompilieren sagt er, dass die Klammern nicht im Gleichgewicht sind, aber ich habe sie schon 300 Mal gezählt - alles ist an seinem Platz

Die Idee ist einfach: Wenn der MACD seit 7 Minuten oder weniger über (oder unter) 0 liegt, wird die Position eröffnet.


Prüfen Sie diese Funktion

void AnalyzeSignal(int signal) 
{ 
  if(signal == 100) 
  { 
    ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на покупку по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
  if(signal == -100) 
  { 
    ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на продажу по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
} 

//---- 
return(0); 
} 
 
CLAIN:
p.s. Wie zeichnet man ein Drehbuch so schön wie Sie?

Wenn Sie Ihre Antwort schreiben, gibt es eine SRC-Taste.

Was die Klammern betrifft, so habe ich die Angewohnheit, anzugeben, worauf sich die schließende Klammer bezieht

}///for

}// (Signal...

 
splxgf:

Und was die Klammern betrifft, so habe ich die Angewohnheit, anzugeben, worauf sich das Schließen bezieht

}///for

}// (Signal...


"für jeden Geschmack..." - aber ich muss zugeben, dass dieser Ansatz den Code mit unnötigen Informationen überfrachtet + Zeit kostet, zusätzliche Codezeilen zu schreiben + das Problem der tiefen Verschachtelung nicht löst (Nummerierungsebenen?)

Strukturieren Sie den Code besser - wie im obigen Beispiel

 

Guten Tag, könnten Sie mir bitte sagen, wie ich eine Bedingung schreiben kann, damit nach der Eröffnung einer Order die zweite nicht auf der gleichen Kerze eröffnet werden kann. Ich schreibe das Folgende:

wenn (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0, "BUY: ",MagicL,0,Green);

}

wobei

// Zählen der Anzahl der offenen Aufträge für ein Wertpapier
int CountOrder=0;
for (int j=0; j<OrdersTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
if (OrderSymbol()==Symbol()) CountOrder++;

// Taktnummer der letzten geschlossenen Position oder -1, wenn sie noch nicht geöffnet wurde
int BarLast=BarLastClosePose();


и

// Taktnummer der letzten geschlossenen Position
int BarLastClosePose()
{
datetime t;
int i;

for (i=0; i<OrdersHistoryTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
//if (OrderMagicNumber()!=Magic) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

 
Vielen Dank , Roger
 
datetime LastTradeBar;

bool CanTrade = True;

int Start()

{ 

if (LastTradeBar==Time[0] ) CanTrade=False; else CanTrade=True; 

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
if (CanTrade)

{

OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

LastTradeBar=Time[0];

} 

}
Tatsächlich ist die logische Variable hier überflüssig.
 
Vinin:


Prüfen Sie diese Funktion


Vinin, verifiziert, alles ist in dieser Funktion in Ordnung... return(0) bezieht sich auf die Startfunktion, und wenn Sie die Klammern, die an return'y angehängt sind, nicht mitzählen, erhalten Sie 14 Klammern... 7 pro Weg
 
CLAIN:

Vinin, verifiziert, alles ist in dieser Funktion in Ordnung... return(0) bezieht sich auf die Startfunktion, und wenn Sie die Klammern, die an return'y angehängt sind, nicht mitzählen, kommen Sie auf 14 Klammern... 7 pro Strecke.

Es hilft, jede Funktion in eine separate Datei zu kopieren und die Kompilierung zu überprüfen.

Wenn die Klammern korrekt sind, dann geben Sie an, wo der Start endet und das MACD-Signal beginnt.

int start() 
{ 
//---- 

int total,ticket; //объявил тотал и тикет 
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[8] = {0,1,2,3,4,5,6,7}; //создал одномерный массив МАКД
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7); 
///Бла-бла-бла
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0); 

total = OrdersTotal(); //тотал считает ордера
///Тут большая жирная закрывающая скобка, если конечно следующая строчка это функция
int signal_MACD()
 
splxgf:

Es hilft, jede Funktion in eine separate Datei zu kopieren und die Kompilierung zu überprüfen.

Wenn die Klammern korrekt sind, geben Sie an, wo der Start endet und das MACD-Signal beginnt.


Hmm ... int signal_MACD() ist tatsächlich eine Funktion... aber warum muss sie hinter der Startfunktion stehen? ich verstehe ehrlich gesagt nicht, warum einige Funktionen außerhalb der Startfunktion und einige innerhalb geschrieben werden... Worin besteht der Unterschied?
 
Um ehrlich zu sein, weiß ich nicht, ob es möglich ist, eine Funktion innerhalb einer anderen zu beschreiben, ich bin noch nie auf so etwas gestoßen.
Grund der Beschwerde: