Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 135
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Você coloca os preços de uma só vez, ou você os recebe e depois os coloca no cálculo?
Você fixa os preços de uma vez, ou os obtém e depois os cola nos cálculos?
for(int i=1; i<=período; i++)
{
H1_Close[i]=Close[k];
k--;
}
Eu pego um pedaço de timesession igual ao período que começa na última barra fechada e viro-o na matriz, porque 1 é a penúltima barra em timesession e o cálculo deve começar a partir do i-ésimo
ou seja, minha função deve retornar o valor SMMA da última barra fechada.
O código abaixo codifica uma idéia simples.
Se o último pedido fechado fosse na SEL
Se a última ordem fechada foi na NEL
Abrir uma ordem NEL
if ( OrderType ()==OP_SELL)
X = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_BUY)
if(X < 0)
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );
PERGUNTA
Que construção lingüística pode ser usada para adicionar mais duas condições a este código (circulado em vermelho)
Se a última ordem fechada for NEL
Se o último pedido da CEL for encerrado
Se a última ordem fechada tiver sido fechada na NEL
Se o último pedido fechado foi fechado em umSL
Obrigado por sua ajuda.
Eu ficaria muito grato se você pudesse escrever o código e não apenas explicar o que tem que ser feito.
Olá. Estou escrevendo um roteiro para apagar todas as ordens pendentes. No entanto, ele elimina apenas um pedido. Tenho sempre duas ordens pendentes ou uma. Em ambos os casos, ele só elimina uma parada de compra. Para excluir Sell Stop você tem que executar o script novamente, desde que não haja outras ordens de Buy Stop. Favor informar onde o erro está localizado.
mudar a direção da busca por(i=total-1;i>=0;i--)
Obrigado, agora funciona. Entendo corretamente que quando uma ordem com índice 0 é excluída, a uma ordem com índice 1 é atribuído índice 0, e na iteração seguinte i == 1, e nenhuma ordem desse tipo aparece. Você pode dizer se este é o caso?
Há uma característica fractal personalizável, bem, isso é terrivelmente pesado. Deixei o desenho dos objetos apenas para mostrar visualmente se os fractais estão se formando corretamente - ele não estará lá.
Pergunta: como podemos facilitar isso, porque os testes visuais são estúpidos:
extern int FrRight=5; // Баров справа
//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow = Low [nFrDn]; // Цена нижнего фрактала
SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);
// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}
//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);
for(pos=nRight+1; pos<bars; pos++) {
r=nRight;
if(mode==MODE_UPPER) {
CopyHigh(symb,tf,0,pos+equals+1,_high);
for(i=1; i<=r; i++) {
if(_high[pos]<=_high[pos-i]) break;
}}
if(mode==MODE_LOWER) {
CopyLow(symb,tf,0,pos+equals+1,_low);
for(i=1; i<=r; i++) {
if(_low[pos]>=_low[pos-i]) break;
}}
//--
if(i==r+1) {
l=nLeft;
e=equals;
for(int j=1; j<=l+equals; j++) {
if(mode==MODE_UPPER) {
if(_high[pos]<_high[pos+j]) break;
if(_high[pos]>_high[pos+j]) l--;
if(_high[pos]==_high[pos+j]) e--;
}
if(mode==MODE_LOWER) {
if(_low[pos]>_low[pos+j]) break;
if(_low[pos]<_low[pos+j]) l--;
if(_low[pos]==_low[pos+j]) e--;
}
if(l==0) {
cn++;
if(cn>numFr) return(pos);
}
//--
if(e<0) break;
}}
}
Print(__FUNCTION__": Фрактал не найден");
return(0);
}
//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
}
}
Obrigado!
Há uma característica fractal personalizável, bem, isso é terrivelmente pesado. Deixei o desenho dos objetos apenas para mostrar visualmente se os fractais estão se formando corretamente - isso não vai acontecer.
Pergunta: como posso facilitar, porque é estúpido testá-lo visualmente:
Obrigado!
Olá. Você poderia aconselhar um recém-chegado?
Aqui está um exemplo:
if(Condição1)
if(Condição2)
{
}
senão
{
}
De acordo com o código, o contrário deve se referir a if(condição1) e será executado se a condição1 não for cumprida
Mas na verdade, ela também será executada se a Condição2 não for atendida.
Olá. Você poderia aconselhar um recém-chegado?
Aqui está um exemplo:
if(Condição1)
if(Condição2)
{
}
senão
{
}
De acordo com o código, o contrário deve se referir a if(condição1) e será executado se a condição1 não for cumprida
Mas na verdade, ela será executada se a Condição2 não for satisfeita.
Tenha o hábito de colocar imediatamente o aparelho com a condição
se(Condição)
{
}
A de acordo com sua pergunta
{
if(Условие2)
{
}
}
else
{
}