Können Sie mir sagen, wie ich den Indikator dazu bringe, nicht den aktuellen, sondern den maximalen Wert der letzten Per-Bars anzuzeigen? Ich habe Osma als Beispiel verwendet, aber er zeigt den aktuellen Wert im Strategy Tester an, wenn sich das Diagramm bewegt, und wenn man ihn einfach auf das Diagramm legt, ist nichts zu sehen:
//---- indicator settings#property indicator_separate_window#property indicator_buffers1#property indicator_color1 Silver
#property indicator_width1 2//---- indicator parametersexternint Per=12;
externint FastEMA=12;
externint SlowEMA=26;
externint SignalSMA=9;
//---- indicator buffersdouble OsmaBuffer1[];
double OsmaBuffer[];
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(4);
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexDrawBegin(0,SignalSMA);
IndicatorDigits(Digits+2);
//---- 3 indicator buffers mappingSetIndexBuffer(0,OsmaBuffer1);
SetIndexBuffer(1,OsmaBuffer);
SetIndexBuffer(2,MacdBuffer);
SetIndexBuffer(3,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization donereturn(0);
}
//+------------------------------------------------------------------+//| Moving Average of Oscillator |//+------------------------------------------------------------------+int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recountedif(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st additional bufferfor(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional bufferfor(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loopfor(i=0; i<limit; i++)
OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- donefor(i=0; i<limit; i++)
{
for(int b=0; b<Per; b++)
{
OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
}
}
return(0);
}
Всё разобрался, перемудрил просто))), достаточно этого:
borilunad: Ich verstehe das! Aber wie kann man diese Variable ("festgelegte Spanne") programmieren? Natürlich kann ich eine Variable "Spread" erstellen und sie jedes Mal ändern, wenn ich den Spread im Tester ändere. Sagen wir, Spread(TestGenerator) oder es gibt eine Funktion, oder man kann irgendwie eine solche Funktion machen, es kann nicht sein, dass man das nicht kann! А?
Bei der Prüfung gibt es eine bestimmte Spanne,
aber bei den meisten DCs ist sie variabel. Wenn Sie möchten, können Sie dies im Tester berücksichtigen. Testen Sie die Expert Advisors im Allgemeinen unter den ungünstigsten Bedingungen. D.h. mit maximaler Streuung, mit möglichen Verzögerungen bei der Auftragseröffnung, etc.
aber bei den meisten DCs ist sie variabel. Wenn Sie möchten, können Sie dies im Tester berücksichtigen. Testen Sie die Expert Advisors im Allgemeinen unter den ungünstigsten Bedingungen. D.h. mit maximaler Streuung, mit möglichen Verzögerungen bei der Auftragseröffnung, etc.
Ich verstehe und mache alles! Wollte nur den Spread wiedergeben, den ich im Prog eingestellt habe, denn im Tester ist Ask oft verzerrt, dann finde es durch Bid+Spread! Siehe Zweig MarketInfo funktioniert nicht im Tester! Dann werden Sie wissen, was los ist! Ich habe dort nachgefragt, aber es war niemand da! Deshalb hierher gezogen, dort geantwortet, wofür Sie und andere Ihnen danken!
borilunad: Ja, ich verstehe und mache alles! Ich wollte nur, dass der Spread, den ich einstelle, im Prog reflektiert wird, da Ask im Tester oft verzerrt ist und ich ihn dann über Bid+Spread finde! Siehe Zweig MarketInfo funktioniert nicht im Tester! Dann werden Sie wissen, was los ist! Ich habe dort nachgefragt, aber es war niemand da! Deshalb hierher gezogen, dort geantwortet, wofür Sie und andere Ihnen danken!
Scheiße, Boris. Ich habe schon einmal geschrieben. Nun, Sie können einen Floating Spread direkt im Expert Advisor imitieren. Was hindert mich daran, eine zufällige Zahl im Bereich der gleitenden Spanne zum Geldkurs hinzuzufügen und diesen mit Stopp-Aufträgen zu öffnen? Und schließen Sie nach Wert, nicht nach Stop-Order. Es ist komplizierter als eine größere statische Streuung, aber wenn Sie es wirklich brauchen, können Sie es tun. Stellen Sie gleichzeitig die Mindeststreuung im Prüfgerät ein.
Scheiße, Boris. Ich habe schon einmal geschrieben. Nun, machen Sie einen simulierten Floating Spread direkt in Ihrem EA. Was hält Sie davon ab, eine zufällige Zahl im Bereich der gleitenden Spanne zum Geldkurs hinzuzufügen und mit Stopp-Aufträgen zu eröffnen? Und schließen Sie nach Wert, nicht nach Stop-Order. Es ist komplizierter als eine größere statische Streuung, aber wenn Sie es wirklich brauchen, können Sie es tun. Stellen Sie gleichzeitig im Prüfgerät die Mindestspanne ein.
Das ist nur ... Eine Denkweise.
Danke Artem, das ist auf eine gute Art klüger! Ich werde es tun!
Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die durch Kreuzung winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht testen nichts (Compiler-Code mag es. Wie man es zumindest etwas zu zeigen?
Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die durch Kreuzung winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht testen nichts (Compiler-Code mag es. Wie man es zumindest etwas zu zeigen?
Sehen Sie sich jemals an, was Sie geschrieben haben?!
Irgendetwas sagt mir, dass "hier das Problem liegt":
Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die auf überqueren winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht alles testen (Compiler-Code mag. Wie man es so machen, dass er zumindest etwas zu zeigen?
//считаю ордера чтобы советник не трогал в ручную выставленные ордера
Wo wird er es anfassen? Ja, und es ist genug, um den Zauberer zu überprüfen, Handbuch ohne Zauberer.
Und, wie oben geschrieben, überschneiden sich die Maischen nicht...
Können Sie mir sagen, wie ich den Indikator dazu bringe, nicht den aktuellen, sondern den maximalen Wert der letzten Per-Bars anzuzeigen? Ich habe Osma als Beispiel verwendet, aber er zeigt den aktuellen Wert im Strategy Tester an, wenn sich das Diagramm bewegt, und wenn man ihn einfach auf das Diagramm legt, ist nichts zu sehen:
Ich verstehe das! Aber wie kann man diese Variable ("festgelegte Spanne") programmieren? Natürlich kann ich eine Variable "Spread" erstellen und sie jedes Mal ändern, wenn ich den Spread im Tester ändere. Sagen wir, Spread(TestGenerator) oder es gibt eine Funktion, oder man kann irgendwie eine solche Funktion machen, es kann nicht sein, dass man das nicht kann! А?
Bei der Prüfung gibt es eine bestimmte Spanne,
aber bei den meisten DCs ist sie variabel. Wenn Sie möchten, können Sie dies im Tester berücksichtigen. Testen Sie die Expert Advisors im Allgemeinen unter den ungünstigsten Bedingungen. D.h. mit maximaler Streuung, mit möglichen Verzögerungen bei der Auftragseröffnung, etc.
Beim Testen gibt es eine bestimmte Streuung,
aber bei den meisten DCs ist sie variabel. Wenn Sie möchten, können Sie dies im Tester berücksichtigen. Testen Sie die Expert Advisors im Allgemeinen unter den ungünstigsten Bedingungen. D.h. mit maximaler Streuung, mit möglichen Verzögerungen bei der Auftragseröffnung, etc.
Hier ist die Funktion
bool isFlagHistoryPos(int mn=-1) {
datetime t;
int gd = MarketInfo(Symbol(),MODE_DIGITS);
int i, j=-1, k=OrdersHistoryTotal();
for (i=0; i<k; i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (AuftragSymbol()==Symbol()) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)) {
double ocp=NormalizeDouble(OrderClosePrice(),gd);
double otp=NormalizeDouble(OrderTakeProfit(),gd);
if(MathAbs(ocp-otp)/Point<=TPpoint) return(true);
}
return(false);
Der Expert Advisor selbst ist beigefügt
/* Dekompiliert von Vinin */
Ja, ich verstehe und mache alles! Ich wollte nur, dass der Spread, den ich einstelle, im Prog reflektiert wird, da Ask im Tester oft verzerrt ist und ich ihn dann über Bid+Spread finde! Siehe Zweig MarketInfo funktioniert nicht im Tester! Dann werden Sie wissen, was los ist! Ich habe dort nachgefragt, aber es war niemand da! Deshalb hierher gezogen, dort geantwortet, wofür Sie und andere Ihnen danken!
Scheiße, Boris. Ich habe schon einmal geschrieben. Nun, Sie können einen Floating Spread direkt im Expert Advisor imitieren. Was hindert mich daran, eine zufällige Zahl im Bereich der gleitenden Spanne zum Geldkurs hinzuzufügen und diesen mit Stopp-Aufträgen zu öffnen? Und schließen Sie nach Wert, nicht nach Stop-Order. Es ist komplizierter als eine größere statische Streuung, aber wenn Sie es wirklich brauchen, können Sie es tun. Stellen Sie gleichzeitig die Mindeststreuung im Prüfgerät ein.
Es ist nur so, dass... einen Gedankengang.
Scheiße, Boris. Ich habe schon einmal geschrieben. Nun, machen Sie einen simulierten Floating Spread direkt in Ihrem EA. Was hält Sie davon ab, eine zufällige Zahl im Bereich der gleitenden Spanne zum Geldkurs hinzuzufügen und mit Stopp-Aufträgen zu eröffnen? Und schließen Sie nach Wert, nicht nach Stop-Order. Es ist komplizierter als eine größere statische Streuung, aber wenn Sie es wirklich brauchen, können Sie es tun. Stellen Sie gleichzeitig im Prüfgerät die Mindestspanne ein.
Das ist nur ... Eine Denkweise.
Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die durch Kreuzung winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht testen nichts (Compiler-Code mag es. Wie man es zumindest etwas zu zeigen?
Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die durch Kreuzung winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht testen nichts (Compiler-Code mag es. Wie man es zumindest etwas zu zeigen?
Irgendetwas sagt mir, dass "hier das Problem liegt":
Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die auf überqueren winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht alles testen (Compiler-Code mag. Wie man es so machen, dass er zumindest etwas zu zeigen?
//считаю ордера чтобы советник не трогал в ручную выставленные ордераWo wird er es anfassen? Ja, und es ist genug, um den Zauberer zu überprüfen, Handbuch ohne Zauberer.
Und, wie oben geschrieben, überschneiden sich die Maischen nicht...