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

 
alexey1979621:

Liebe Forumsnutzer, bitte helfen Sie mir sehr.


if (TimeBar==Time[0]) return(0);


double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); // wobei 0 die Verschiebung vom aktuellen Balken um den angegebenen Anzahl der Perioden rückwärts
//double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);
double MA2 = NormalizeDouble(iMA(NULL,timeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits);
//double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits)
double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits);

double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),Digits)

if (MaxOrders>b && Tief[0]>=MathMax(MA1,MA2)&& Tief[0]>MA3 && Ask>MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Trade)
{
if (OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Blue) ==-1) TimeBar=0;
else TimeBar=Time[0];

}
if (MaxOrders>s && High[0]<=MathMin(MA1,MA2) && High[0]<MA3 && Bid<MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Trade)
{
if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP, "Puria_1",Magic,0,Red) ==-1) TimeBar=0;
else TimeBar=Time[0];
}

zurück(0);


Unter diesen Bedingungen eröffnet der Expert Advisor einen Trade, z.B. auf SELL, schließt ihn mit Gewinn und eröffnet sofort einen weiteren Trade auf SELL. Wie kann man in einem EA vorschreiben, dass bei Erhalt des Signals nur ein Geschäft eröffnet werden soll, d.h. ein Signal - ein Geschäft.
Ich danke Ihnen im Voraus.



1 Variante - entweder überprüfen Sie die Geschäftsbedingung so, dass: Index 2 ein Kaufsignal und Index 1 ein Verkaufssignal anzeigt, dann wird bei der Eröffnung eines Balkens mit Index 0 ein Verkaufsgeschäft eröffnet.

Die 2. Variante besteht darin, die Auftragshistorie zu prüfen und die Signal- und Auftragsindizes zu vergleichen; wenn sie übereinstimmen, werden keine weiteren Aufträge eröffnet.

 

Wo und wie wird die TimeBar-Variable initialisiert?

Auch wenn es Ihnen in Ihrem Fall nicht viel nützen wird. Ich sehe die Handelsvariable in den Bedingungen, also passen Sie die Öffnung damit an.

 
webman1988:

Ich kämpfe nun schon seit zwei Tagen und kann es nicht herausfinden. Ich muss den niedrigsten Preis für die letzten n Balken finden, aber nicht vom aktuellen Balken, sondern vom Balken, der durch die Funktion erhalten wurde. Die Funktion gibt den Index des Taktes zurück, bei dem der Auftrag eröffnet wurde. Dies ist der Balken, von dem aus wir in der Historie der n Balken zurückblicken müssen, um den niedrigsten Preis zu finden. Unten ist mein Code, was ist daran falsch?



int n = 10;  //баров в глубь истории 

index_bar= ND(iLow(Symbol(),0,i)); // начинаем с этого бара

double val=Low[iLowest(NULL,0,MODE_LOW,n,index_bar)];
wie diese
 
r772ra:


etwa so.

Herzlichen Dank! Versucht, diese Funktion auch zu verwenden, aber wieder in einer Schleife, es stellt sich heraus, einfach )))) Nochmals vielen Dank!
 
FAQ:

gyfto:

Ich habe die folgende Frage. Wie kann ich das Mausrad abfangen, welche winapi-Funktionen? Lassen Sie mich erklären, warum. Es gibt einen int-Parameter in externs. Sie müssen das Rad drehen, um den Wert zu erhöhen oder zu verringern.


Wenn Sie herausgefunden haben, wie man das macht, posten Sie es...

Bislang hat es sich einfach so ergeben:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 RoyalBlue
#import "user32.dll"
        int GetKeyState(int nVirtKey);//обрабочик клавиатуры
#import

extern int       period = 1;
extern bool      WinAPI = false;//включение-отключение перехвата клавиатуры
extern string    s1="Alt+ArrowUp - increment of period";//памятка
extern string    s2="Alt+ArrowDown - decrement of period";
extern string    s3="Alt+Home - period=1";

double SMA[];
int Alt, ArrowUp, ArrowDown, Home;

int init(){
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0,SMA);
    if(WinAPI){//запоминаем состояние клавиш
        Alt = GetKeyState(18);
        ArrowUp = GetKeyState(38);
        ArrowDown = GetKeyState(40);
        Home = GetKeyState(36);
    }
    return(0);
}

int deinit(){
    if(WinAPI) Comment(" ");
    return(0);
}

int start(){
    if(WinAPI){//ставим сконденсированный флаг и снова запоминаем состояние клавиш НА КАЖДОМ ТИКЕ
        int flag = ((Alt!=GetKeyState(18)) && Home==GetKeyState(36)) + 10*((Alt!=GetKeyState(18)) && (ArrowUp==GetKeyState(38))) + 100*((Alt!=GetKeyState(18)) && (ArrowDown==GetKeyState(40)));
        Alt = GetKeyState(18);
        ArrowUp = GetKeyState(38);
                ArrowDown = GetKeyState(40);
        Home = GetKeyState(36);
    }
    int    counted_bars=IndicatorCounted();
    if(WinAPI){//разводка сконденсированного флага; перед limit, чтобы отсюда эмулировать прикрепление к графику
        switch(flag){
            case 11: 
                    if(period>1){
                            period--; 
                            counted_bars = 0;
                    } 
                    break;
            case 101: 
                    period++; 
                    counted_bars = 0; 
                    break;
            case 110: 
                    period=1; 
                    counted_bars = 0;
            }
        }
        int limit = Bars - counted_bars - 1;
        /*Шпаргалка. В первый заход counted_bars = 0, limit = Bars - 1 (номер самого левого БАРа, т.к. считается с нуля)
        на первом тике нулевого бара counted_bars = Bars - 2, limit = 1 (пересчитаем предпоследний БАР)
        на следующих тиках counted_bars = Bars - 1, limit = 0 (нулевой, он же текущий, БАР)*/
        if(WinAPI) Comment("flag=", flag, ", period=", period);//принтуем в коммент для визуализации
        for(int bar=0; bar<=period*(limit/period); bar++){//обычный цикл индикаторов
                SMA[bar] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, bar);
        }
        return(0);
}
 
Es ist nicht interessant, es ist das Mausrad-Hijacking, das das Problem ist: https: //www.mql5.com/ru/forum/139237
 
FAQ, ich habe diesen Thread gesehen, bevor ich diesen Thread kontaktiert habe, daher war ich von Ihrer Reaktion auf die Frage nicht überrascht)
 
Das Problem ist mit Hooks, obwohl ich dieses Problem auf eine einfachere Weise gelöst habe - wenn nötig, mache ich mein eigenes Einstellungsfenster in einer DLL und dort kann ich tun, was ich mit den Windows-Steuerelementen will.
 
Wie Vadim sagte mir, nicht zu verwenden, Haken von unter MT4, die Plattform mag sie nicht, so dass ich nicht berühren sie. Wahrscheinlich umsonst)
 
gyfto:
Wie Vadim sagte mir, nicht zu verwenden, Haken von unter MT4, die Plattform mag sie nicht, so dass ich nicht berühren sie. Wahrscheinlich umsonst)
Es ist MT4 selbst, die nicht wie Haken, aber aus ihm heraus (von DLL) können Sie Haken auf andere anwenden.
Grund der Beschwerde: