[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 232

 
drknn:


Você precisa solicitar o preço do nível de forma programática. Para isso, você deve ter o objeto "Fibo" colocado em um gráfico e configurado (tudo programático). Não é tão fácil quanto pode parecer à primeira vista. No entanto, os deuses não queimam o pote. Uma vez eu tive que jogar com níveis de Fibo. E agora estou trabalhando com o processamento desses níveis. Em geral, se você quiser, você pode descobrir.

Aqui está um exemplo de código para criar uma Fibo em um gráfico.

Eu tive que fazer uma sub-rotina para solicitar o preço do nível. Aqui está (você pode descobrir se quiser)

Ou seja, devemos programar o objeto Fibonacci ao ventilador Fibonacci e descobrir o preço do nível somente dessa forma. Eu acertei?
 
fury2006:
Em outras palavras, precisamos adicionar o objeto Fibonacci ao vetor Fibonacci e descobrir o preço do nível somente dessa forma. Eu acertei?
Você não precisa anexar um objeto Fibo padrão ao gráfico. Você pode simplesmente calcular programmaticamente todos os níveis de Fibo considerando as condições existentes,
Insira-as em variáveis ou um array e compare o preço com estes níveis calculados por você mesmo. É exatamente isso que eu faço... Embora - tudo isso é IMHO.
 
artmedia70:
Não é necessário colocar um objeto Fibo padrão na tabela. Você pode simplesmente calcular programmaticamente todos os níveis de Fibo com base nas condições existentes,
coloque-os em variáveis ou um array e compare o preço com estes níveis que você calculou. É exatamente isso que eu faço... Embora - tudo isso é IMHO.
Você pode, por favor, escrever um exemplo de código?
 
fury2006:
Você pode, por favor, escrever um exemplo de código?
É mais complicado do que aquele que Vladimir lhe ofereceu... :))
 
artmedia70:
E é mais complicado do que aquele que Vladimir sugeriu. :))
Eu poderia gostar mais :) Além disso, você não quer ter objetos extras na tela. Haverá muitos deles de qualquer forma e quaisquer outros desnecessários só atrapalharão
 
fury2006:
Bem, talvez eu goste mais :) E além disso, não quero objetos adicionais na tela. Já haverá muitos deles lá, e quaisquer outros desnecessários só dificultarão

Meu código está firmemente vinculado aos dados obtidos pelo Consultor Especialista para o qual foi escrito. A função é apenas uma parte dos cálculos necessários e não terá nenhum valor prático para você - apenas como um tutorial para autocompreensão. E isso com o resto do código, onde todos os cálculos preliminares são feitos.

Se eu o tornasse universal, funcionaria mais devagar, mas não quero isso... :)

Mas de nada. Esta função foi reescrita a partir do Excel, onde eu verifiquei seus cálculos. Dois parâmetros são passados para ele - a quebra do ZigZag (inferior ou superior, dependendo do tipo de posição aberta) e o nível de preço 23,6 da fibra. A fibra não é plotada como é geralmente aceito, mas o preço é considerado como tendo quebrado a fibra 23,6 e está acima do nível de consolidação calculado de antemão. O zero da fibra é colocado na ruptura em ZZ, e uma pose é aberta em 23,6 (quando ela é quebrada). Os níveis restantes são escritos nas variáveis declaradas no nível global e subseqüentemente inseridos na matriz das ordens, das quais os níveis são tomados para qualquer posição em aberto.

//=========================================================================================================
void CalcFiboLevel(double priceZZ, double price23)   // Рассчитывает уровни Фибы по нулевому и 23.6 значениям цен
{
   double A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,
          B2,B3,B4,B5,B6,B7,B8,B9,B10,B11;
   
   A2 = 0;                                      // Уровни фибы  
   A3 = 23.6;
   A4 = 38.2;
   A5 = 50.0;
   A6 = 61.8;
   A7 = 78.6;
   A8 = 100.0; 
   A9 = 161.8;  
   A10= 261.8; 
   A11= 423.6;    
   B2 = priceZZ;                                // Цена нулевого уровня фибы (нижний/верхний перелом ЗигЗага)
   B3 = price23;                                // Цена уровня 23.6 фибы (цена открытия позы)
   B4 = ((B3-B2) *(A4-A2) +(A3-A2) *B2)/(A3 -A2);
   B5 = ((B4-B3) *(A5-A3) +(A4-A3) *B3)/(A4 -A3);
   B6 = ((B5-B4) *(A6-A4) +(A5-A4) *B4)/(A5 -A4);
   B7 = ((B6-B5) *(A7-A5) +(A6-A5) *B5)/(A6 -A5);
   B8 = ((B7-B6) *(A8-A6) +(A7-A6) *B6)/(A7 -A6);
   B9 = ((B8-B7) *(A9-A7) +(A8-A7) *B7)/(A8 -A7);
   B10= ((B9-B8) *(A10-A8)+(A9-A8) *B8)/(A9 -A8);
   B11= ((B10-B9)*(A11-A9)+(A10-A9)*B9)/(A10-A9);
   
   
   Fibo38_Price  = B4;                         // ((B3-B2)*(A4-A2)+(A3-A2)*B2)/(A3-A2)
   Fibo50_Price  = B5;                         // ((B4-B3)*(A5-A3)+(A4-A3)*B3)/(A4-A3)
   Fibo61_Price  = B6;                         // ((B5-B4)*(A6-A4)+(A5-A4)*B4)/(A5-A4)
   Fibo78_Price  = B7;                         // ((B6-B5)*(A7-A5)+(A6-A5)*B5)/(A6-A5)
   Fibo100_Price = B8;                         // ((B7-B6)*(A8-A6)+(A7-A6)*B6)/(A7-A6)
   Fibo161_Price = B9;                         // ((B8-B7)*(A9-A7)+(A8-A7)*B7)/(A8-A7)
   Fibo261_Price = B10;                        // ((B9-B8)*(A10-A8)+(A9-A8)*B8)/(A9-A8)
   Fibo423_Price = B11;                        // ((B10-B9)*(A11-A9)+(A10-A9)*B9)/(A10-A9)

   return;
}

Quanto ao seu uso, teria de estripar todo o Expert Advisor para entendê-lo.

 
artmedia70:

Meu código está firmemente anexado aos dados obtidos pelo Consultor Especialista para o qual foi escrito. A função é apenas uma parte dos cálculos necessários e não terá nenhum valor prático para você - apenas como um tutorial para autocompreensão. E isso junto com o resto do código, onde todos os cálculos preliminares são feitos.

Se eu o tornasse universal, seria mais lento, e não quero isso... :)

Mas de nada. Esta função é reescrita a partir do Excel, onde eu verifiquei seus cálculos. Dois parâmetros são passados a ele - a quebra do ZigZag (inferior ou superior, dependendo do tipo de posição aberta) e o nível de preço 23,6 da fibra. A fibra não é plotada como é geralmente aceito, mas o preço é considerado como tendo quebrado a fibra 23,6 e está acima do nível de consolidação calculado de antemão. O zero da fibra é colocado na ruptura em ZZ, e uma pose é aberta em 23,6 (quando ela é quebrada). Os níveis restantes são escritos nas variáveis declaradas no nível global e subseqüentemente inseridos na matriz das ordens, das quais os níveis são tomados para qualquer posição em aberto.

Quanto a como usá-lo, você deve estripar todo o Expert Advisor para deixar claro...

Isso é ótimo, você me deu uma idéia.
 

Olá a todos! Por favor, ajude-me a combinar as seguintes coisas. O resultado deve ser: duas linhas seguindo o preço, uma inferior a Ask por 20 pips,

Além disso, recebo um sinal sonoro se o preço mudar em 20 pontos por 1 tick.

Tudo funciona bem separadamente. Obrigado de antemão!

1) A linha abaixo do "Pergunte por 20 pips".

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask-20*Point);
return(0);
}

//+------------------------------------------------------------------+

2) A linha está 20 pips acima do Ask.

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+

3) Taxa de mudança de preço ao longo do tempo.

#property show_inputs

extern int pips=2; //изменение аск
extern double Time_=0.1; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize(Ask_save,количество_символов);
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}
if(!все_из_обзора_рынка){
количество_символов=1;
ArrayResize(Ask_save,количество_символов);
ArrayResize(val,количество_символов);
val[0]=Symbol();
}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим

Alert("пересчитаем через "+Time_+" сек.");

for(i=0;i<количество_символов;i++){//посчитаем стоимость спреда для инструментов из обзора рынка
if((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert(val[i]+","+Period()+" изменился вниз на "+DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)),0)+" pips");
PlaySound("timeout.wav");
}
if((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert(val[i]+","+Period()+" изменился вверх на "+DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]),0)+" pips");
PlaySound("email.wav");
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep(Time_*1000);//пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){Comment("");}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList(string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if(Selected) SymbolsFileName = "symbols.sel"; else SymbolsFileName = "symbols.raw";
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
if(hFile < 0) return(-1); if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116; }
else { SymbolsNumber = FileSize(hFile) / 1936; Offset = 1924; }
ArrayResize(Symbols, SymbolsNumber);
if(Selected) FileSeek(hFile, 4, SEEK_SET);
for(int i = 0; i < SymbolsNumber; i++){Symbols[i] = FileReadString(hFile, 12); FileSeek(hFile, Offset, SEEK_CUR);}
FileClose(hFile);
return(SymbolsNumber);
}
 

Você pode explicar porque este código às vezes congela em um lugar e você tem que reiniciar o terminal para retomá-lo?

int ticket,err;
         Alert("nachalo");
         ticket = OrderSend(Symbol (), OP_BUY, 1, Ask, 10,0,0, "dsgdsf", 0, 0, CLR_NONE);
         err = GetLastError();
         Alert (err);
         Alert("konec");
         OrderClose (ticket,1,Bid,5,CLR_NONE);
         Alert ("zakrito");
 
globad:

Olá a todos! Por favor, ajude-me a combinar as seguintes coisas. O resultado deve ser: duas linhas seguindo o preço, uma inferior a Ask por 20 pips,

Além disso, recebo um sinal sonoro se o preço mudar em 20 pontos por 1 tick.

Tudo funciona bem separadamente. Obrigado de antemão!

1) A linha abaixo do "Pergunte por 20 pips".

2) A linha está 20 pips acima do Ask.

3) Taxa de mudança de preço ao longo do tempo.


Parece que já é entediante... É elementar, Watson:

ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;

É o nome de uma única linha.

Dica: procure o nome da segunda linha. É diferente do primeiro?

Sim, e por que continuar construindo uma instalação já construída?

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+

Agora olhe para a diferença:

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
if (ObjectFind("MyPriceLine")<0) ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+