Forexman77: Você precisa disso, é claro! Bem, como aplicar esta construção para buscar o mínimo? Não posso fazer isso com meu cérebro)
Para encontrar o máximo, é atribuído ao valor da variável um valor 0 (obviamente menor que qualquer um dos valores do indicador).
Isto significa que para encontrar o mínimo, devemos acrescentar um valor deliberadamente maior. Você pode usar a constante EMPTY_VALUE ou o valor do indicador diretamente em alguma barra entre as quais o mínimo é pesquisado.
É claro que sim! Bem, como aplicar esta construção para encontrar o mínimo? Não consigo descobrir por meio de brainstorming). E eu quero aprender como declarar uma matriz. Eu tentei desta maneira:
Sai -1.
O laço passa por 34 valores e a matriz contém apenas 33 células, correto.
Para encontrar o máximo, é atribuído à variável val um valor 0 (obviamente menor do que qualquer um dos valores do acusador).
Isto significa que para encontrar o mínimo, devemos acrescentar um valor deliberadamente maior. Você pode usar a constante EMPTY_VALUE ou o valor do indicador diretamente em alguma barra entre as quais o mínimo é pesquisado.
#property strict#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
externint pos=1;
externint sl=40;
externint tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
intOnInit()
{
//---
MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку//---return(INIT_SUCCEEDED);
}
voidOnTick()
{
//---if(IsNewBar()==true)//если новый бар включаемся
{
if(buy(pos)==true)//если цена выше МА продолжаем
{
if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена //все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО // ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
{
trade=true;
}
if(trade==true)
{
OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
trade=false;
}
}
}
if(sell(pos)==true)
{
if(!ExistPositions(Symbol(),-1,-1,0))
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
{
trade2=true;
}
if(trade2==true)
{
OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
trade=false;
}
}}
}
}
//возвращает истину если закрытие бара с указаной позицией выше МАbool buy(int pos)
{
if(iClose(Symbol(),0,pos)>MA.Main(1))
returntrue;
elsereturnfalse;
}
//+------------------------------------------------------------------+//| возвращает истину если закрытие бара с указаной позицией ниже МА//+------------------------------------------------------------------+bool sell(int pos)
{
if(iClose(Symbol(),0,pos)<MA.Main(1))
returntrue;
elsereturnfalse;
}
TODAS AS FUNÇÕES exceto as duas condições de compra e venda são tiradas da filial da kim...... por favor me diga onde errei...eu preciso de uma transação por interseção
/SetRectangle(clrBlue,"Прямоугольник",Time[10],Low[10],Time[0],High[0]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"////+----------------------------------------------------------------------------+void SetRectangle(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, int sz=0, bool bk=true) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
ObjectSet(nm, OBJPROP_TIME1 ,t1);
ObjectSet(nm, OBJPROP_PRICE1 ,p1);
ObjectSet(nm, OBJPROP_TIME2 ,t2);
ObjectSet(nm, OBJPROP_PRICE2 ,p2);
ObjectSet(nm, OBJPROP_COLOR ,cl);
ObjectSet(nm, OBJPROP_WIDTH ,sz);
ObjectSet(nm, OBJPROP_BACK ,bk);
}
como fazer um retângulo traçar para frente em vez de para trás, por exemplo, cinco barras para frente a um preço especificado...... e não para redesenhá-lo
Mas não há muitas informações na pergunta. Há muitos extremos nas barras de horário no mês. E a propósito, extrema de quê exatamente?
Presumi que existem apenas dois extremos mensais - min e max... Bem, seja o que for, a princípio era um código longo, por isso pedi ajuda... Mas depois me apercebi, consegui encaixá-lo em quatro linhas.
Você precisa disso, é claro! Bem, como aplicar esta construção para buscar o mínimo? Não posso fazer isso com meu cérebro)
Para encontrar o máximo, é atribuído ao valor da variável um valor 0 (obviamente menor que qualquer um dos valores do indicador).
Isto significa que para encontrar o mínimo, devemos acrescentar um valor deliberadamente maior. Você pode usar a constante EMPTY_VALUE ou o valor do indicador diretamente em alguma barra entre as quais o mínimo é pesquisado.
Ou assim:
É claro que sim! Bem, como aplicar esta construção para encontrar o mínimo? Não consigo descobrir por meio de brainstorming).
Sai -1.E eu quero aprender como declarar uma matriz. Eu tentei desta maneira:
O laço passa por 34 valores e a matriz contém apenas 33 células, correto.
E tente ArrayMinimum(num_array,WHOLE_ARRAY,0);
... Também quero aprender a declarar uma matriz...
Se apenas para treinamento e propósito cognitivo...
O período no qual o mínimo e o máximo são determinados - deve ser um parâmetro externo para permitir o ajuste e a otimização.
Portanto, antes de tudo, a matriz é declarada sem tamanho:
double val[];A declaração da matriz é feita em uma seção comum, não em uma função.
Na função init, o tamanho é definido para a matriz:
Agora, na função de partida, nós preenchemos a matriz:
Finalmente , ArrayMaximum() e ArrayMinimum() são aplicados à matriz.
Para encontrar o máximo, é atribuído à variável val um valor 0 (obviamente menor do que qualquer um dos valores do acusador).
Isto significa que para encontrar o mínimo, devemos acrescentar um valor deliberadamente maior. Você pode usar a constante EMPTY_VALUE ou o valor do indicador diretamente em alguma barra entre as quais o mínimo é pesquisado.
Ou assim:
O laço passa por 34 valores, enquanto a matriz contém apenas 33 células, conserte-o.
E tente ArrayMinimum(num_array,WHOLE_ARRAY,0);
Caros colegas programadores! Estou em apuros, por favor, me ajude.
Eu já me arrebentei com este código.
Aqui está a função completa:
Alcança a impressão e é isto que ela produz:
Enquanto bilhete: 225299700 é um bilhete de pedido OP_SELLLIMIT.
E modifica a parada de perda desta ordem selecionada, como esperado. Mas OP_BUY não é visto, embora eu tenha certeza de que existe:
Qual poderia ser o problema? Por que ele está fazendo isso comigo? Por favor, ajude-me a entender!
outra pergunta sobre a função
como fazer um retângulo traçar para frente em vez de para trás, por exemplo, cinco barras para frente a um preço especificado...... e não para redesenhá-lo
Eu já dei uma olhada. Obrigado.
Mas não há muitas informações na pergunta. Há muitos extremos nas barras de horário no mês. E a propósito, extrema de quê exatamente?