[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 922

 
_SS_:
Como posso determinar o tipo de pedido aberto?

Tipo de pedido()

Na verdade, você deve começar com um livro didático... :) Ou pelo menos use F1 no MetaEditor

int OrderType( )
Tipo de pedido de devolução do pedido atualmente selecionado. Pode ser um dos seguintes valores:
OP_BUY - posição de compra,
OP_SELL - posição de venda,
OP_BUYLIMIT - ordem de compra pendente ao atingir um nível especificado, o preço atual é mais alto do que o nível,
OP_BUYSTOP - ordem de compra pendente quando o nível especificado é atingido, o preço atual está abaixo do nível,
OP_SELLLIMIT - ordem de venda pendente quando o nível especificado é atingido, o preço atual está abaixo do nível,
OP_SELLSTOP - ordem de venda pendente quando o nível especificado é atingido, o preço atual está acima do nível.
A ordem deve ser pré-selecionada usando a função OrderSelect().
Exemplo:
 int order_type; if(OrderSelect(12, SELECT_BY_POS)==verdadeiro) { order_type=OrderType(); // ... } else Print("OrderSelect() retornou um erro - ",GetLastError());
 
gheka:

duplo NormalizeDuplo( valor duplo, dígitos int)

valor - Valor do ponto flutuante. --- o que é isso?
dígitos - Formato de precisão, o número de dígitos após a vírgula decimal (0-8). --- como 1.29800 são 5 dígitos, certo?

Um valor de ponto flutuante é um número real como o dobro

E ao invés de dígitos , use uma variável do tipo int

Por exemplo, int dg=MarketInfo ( Symbol(), MODE_DIGITS);

 
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;

static int KolBars;



if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)


{

KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия

}




// Торговые критерии

// Критерий откр. Buy


Opn_B=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}

}




Por favor, ajude, estou pedindo pela 3ª vez. Uma EA elementar, abre uma posição de compra ao aparecer uma vela nova (desde que as 2 velas anteriores sejam verdes), e fecha a posição no fechamento da vela na qual a posição foi aberta, ou no fechamento da vela seguinte.

A que você vê acima abre uma posição toda vez que uma nova vela aparece, sem reagir aos critérios de abertura, mas não entendo como fechar a posição, não consegui encontrá-la no tutorial ou nos fóruns.

 
artmedia70:

O valor do ponto flutuante é um número real do tipo duplo

E ao invés de dígitos , use uma variável do tipo int

Por exemplo, int dg=MarketInfo ( Symbol(), MODE_DIGITS);


Eles me escreveram: "NormalizeDuplo(), verifique o limite máximo/mínimo do lote, se cinco dígitos - aumente a parada e o lucro em 10 vezes".


A documentação diz: "Arredondamento do número do ponto flutuante para precisão especificada. Os valores calculados de StopLoss e TakeProfit, assim como os preços de abertura de ordens pendentes devem ser normalizados com precisão, cujo valor é armazenado nos Dígitos variáveis pré-definidos".

Não o encontrei no livro didático. Entendi que preciso normalizar o preço atual, StopLoss e TakeProfit com NormalizeDouble --- como devo normalizá-lo?

duplo NormalizeDuplo( valor duplo, dígitos int)

valor duplo -- em vez de valor duplo eu posso usar, por exemplo, Prise

int dígitos -- e esta variável dg é igual a MarketInfo( Symbol(), MODE_DIGITS); ???

 
gheka:


Escrevi: "NormalizeDuplo(), verifique o limite máximo/mínimo do lote, se cinco dígitos - aumente a parada e o lucro em 10 vezes".


A documentação diz: "Arredondamento do número do ponto flutuante para precisão especificada. Os valores calculados de StopLoss e TakeProfit, assim como os preços de abertura de ordens pendentes devem ser normalizados com precisão, cujo valor é armazenado nos Dígitos variáveis pré-definidos".

Não o encontrei no tutorial, entendo que preciso usar NormalizeDouble --- para normalizar o preço atual, StopLoss e TakeProfit ? se sim, como exatamente?

duplo NormalizeDuplo( valor duplo, dígitos int)

valor duplo - em vez disso, eu posso definir, por exemplo, Prise

int dígitos -- e esta variável dg é igual a MarketInfo( Symbol(), MODE_DIGITS); ???

int StopLoss=50; // StopLoss em pips

int TakeProfit=150; // TakeProfit em pips

intOrderDistance=50; // Distância de ordem pendente em pontos

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT); // Tamanho do ponto na moeda de cotação

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Número de dígitos após o ponto decimal no preço do símbolo

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Nível mínimo de stop loss/stake profit permitido em pontos

double pa=MarketInfo(Symbol(), MODE_ASK); // Pergunte o preço

double pb=MarketInfo(Symbol(), MODE_BID); // Preço da licitação

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

dupla slB=NormalizarDuplo(pa-StopLoss*pt, dg); // normalizar o nível de preço StopLoss para a posição Comprar

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // normalize o nível de preço TakeProfit para a posição Bid

double slS=NormalizeDouble(pb+StopLoss*pt, dg); // normalizeStopLoss nível de preço para a posição de Venda

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // normalize o nível de preço TakeProfit para a posição de Venda

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // normalizar o nível de preços para colocar uma ordem de compra pendente

Duplo SetS=NormalizarDuplo(pb-SetOrderDistance*pt, dg); // normalizar preço para colocar uma ordem de venda pendente

dupla slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // normalizar o nível de preço do StopLoss para uma ordem de compra pendente

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // normalizar o nível de preço do TakeProfit da ordem de compra pendente

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // normalizar o nível de preço do StopLoss para a ordem de venda pendente

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalizar o nível de preço de TakeProfit da ordem de venda pendente

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Descubra-o... :)

E não se esqueça do StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Verifique a distância mínima de parada e decolagem para ter certeza de que não é menor que este valor

 
artmedia70:

int StopLoss=50; // StopLoss em pontos

int TakeProfit=150; // TakeProfit em pontos

intOrderDistance=50; // Distância de colocação de ordem pendente em pontos

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

int pt=MarketInfo(Symbol(), MODE_POINT); // Tamanho do ponto na moeda de cotação

int dg=MarketInfo(Symbol(),MODE_DIGITS); // Número de dígitos após o ponto decimal no preço do símbolo

int StLev=MarketInfo(Symbol(),MODE_STOPLEVEL); // Nível mínimo de stop loss/stake profit permitido em pontos

double pa=MarketInfo(Symbol(), MODE_ASK); // Pergunte o preço

double pb=MarketInfo(Symbol(), MODE_BID); // Preço da licitação

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

dupla slB=NormalizarDuplo(pa-StopLoss*pt, dg); // normalizar o nível de preço StopLoss para a posição Comprar

double tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // normalize o nível de preço TakeProfit para a posição Bid

dupla slS=NormalizarDuplo(pb+StopLoss*pt, dg); // normalizar o nível de preço StopLoss para a posição de Venda

double tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // normalize o nível de preço TakeProfit para a posição de Venda

doubleB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // normalizar o nível de preços para colocar uma ordem de compra pendente

Duplo SetS=NormalizarDuplo(pb-SetOrderDistance*pt, dg); // normalizar preço para colocar uma ordem de venda pendente

dupla slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // normalizar o nível de preço do StopLoss para uma ordem de compra pendente

double tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // normalizar o nível de preço do TakeProfit da ordem de compra pendente

double slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // normalizar o nível de preço do StopLoss para a ordem de venda pendente

double tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // Normalizar o nível de preço de TakeProfit da ordem de venda pendente

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Descubra-o... :)

E não se esqueça do StopLev - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);

Verificar a distância mínima para definir paradas e decolagens para que não seja inferior a este valor


Muito obrigado!!!! Vou dar uma olhada nisso! )
 
Como criar uma função e chamá-la?
 

Janelas reinstaladas. a janela de alerta parou de aparecer. há uma notificação audível, há uma entrada de registro, mas a janela flutuante não aparecerá.

Eu limpei o terminal, recompilei tudo. qual poderia ser a razão?

 
_SS_:
Como criar uma função e chamá-la?
Pela enésima vez, leia um livro didático e aprenda o básico... :)
 
artmedia70:
Pela enésima vez, leia um livro didático, estude o material. :)
Eu tentei, não funciona!