Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 64

 
alexey1979621:

Caros usuários do fórum, por favor, me ajudem muito.


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


double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digitos); // onde 0 é deslocado da barra atual pelo especificado contagem de períodos para trás
//double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digitos);
duplo MA2 = NormalizeDuplo(iMA(NULL,timeFrame_3,MA_Period_3,MA_Shift_3,MA_Método_3,Applied_Price_3,0),Dígitos);
//douplo MA31 = NormalizeDuplo(iMA(NULL,timeFrame_3,period_3,ma_shift_3,ma_método_3,aplicado_preço_3,2),Dígitos)
duplo MA3 = NormalizeDuplo(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Método_4,Applied_Price_4,0),Dígitos);

duplo OsMA = NormalizeDuplo(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),Dígitos)

if (MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>MathMax(MA1,MA2)+DeltaOpen*Point && Pergunte>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];
}

retorno(0);


Com estas condições, o Expert Advisor abre um negócio, digamos, na SELL, fecha-o com lucro, e imediatamente abre outro negócio na SELL. Como prescrever em uma EA, que quando o sinal é recebido, apenas um negócio deve abrir, ou seja, um sinal - um negócio.
Agradecemos antecipadamente.



1 variante - ou verificar a condição do negócio de modo que: o índice 2 mostra um sinal de compra e o índice 1 um sinal de venda, então na abertura de um bar com índice 0 abrirá um negócio de venda.

A segunda variante é verificar o histórico de pedidos e comparar o sinal e os índices de pedidos, se coincidirem, então não abrir mais pedidos.

 

Onde e como a barra de tempo variável é inicializada?

Embora isso não o ajudará muito em seu caso. Eu vejo a variável Comércio nas condições, portanto ajuste a abertura com ela.

 
webman1988:

Estou lutando há dois dias e não consigo entender. Preciso encontrar o preço mais baixo para as últimas n barras, mas não da barra atual, mas da barra recebida através da função. A função retorna o índice da barra em que a ordem foi aberta. Esta é a barra da qual precisamos olhar para trás ao longo da história para que as n barras encontrem o preço mais baixo. Abaixo está meu código, o que há de errado com ele?



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

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

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


algo como isto.

Muito obrigado! Tentei usar esta função também, mas novamente em um loop, ela se revela simples )))) Mais uma vez, obrigado!
 
FAQ:

gyfto:

Tenho a seguinte pergunta. Como intercepto a roda do mouse, quais funções do winapi? Deixe-me explicar por quê. Há um parâmetro int nos externs. Você precisa girar a roda para aumentá-la ou diminuí-la.


Quando souber como fazer isso, afixe...

Até agora, é assim mesmo que tem funcionado:

#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);
}
 
Não é interessante, é o seqüestro da roda do mouse que está em questão : https://www.mql5.com/ru/forum/139237
 
FAQ, eu vi este tópico antes de contatar este tópico, então não fiquei surpreso com sua reação à pergunta)
 
O problema é com os ganchos, embora eu tenha resolvido este problema de forma mais simples - se necessário, eu faço minha própria janela de ajustes em uma DLL e lá posso fazer o que eu quiser com os controles do Windows.
 
Como Vadim me disse para não usar ganchos de sob o MT4, a plataforma não gosta deles, então eu não os toco. Provavelmente por nada)
 
gyfto:
Como Vadim me disse para não usar ganchos de sob o MT4, a plataforma não gosta deles, então eu não os toco. Provavelmente por nada)
É o próprio MT4 que não gosta de ganchos, mas de dentro dele (de DLL) você pode aplicar ganchos a outros.
Razão: