[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 227

 
drknn:

Aumentar o escorregamento. As negociações devem ter sido abertas em um mercado rápido. Acontece às vezes depois de notícias importantes que o Eurobucks é tão rápido em 1-2 ticks que é um pesadelo. E enquanto o servidor está processando o pedido da EA, o preço muda de forma muito abrupta.


Receio que se o Slippage for sempre grande, a DT possa começar a abusar dele de forma sistemática. Seria desejável "movê-lo" dinamicamente - somente se o preço no servidor fosse melhor do que aquele em que o pedido foi enviado. Seria semelhante à licitação manual - se o preço solicitado não estiver mais disponível, então será oferecida uma nova licitação que pode ser aceita pressionando OK ou rejeitada - se for a mesma situação, é claro.

 

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);
}
 
Vovo4ka:

Tipo, um petrosiano esperto quer fazer uma piada))

Sinto muito por isso, o dinheiro é seu. Quanto mais de vocês, melhor estaremos.
 
ScioMe:

O MetaEditor tem um indicador iMA padrão. Sinta-se à vontade para usá-lo :)
Por favor, digam-me onde o obter e onde o colocar, ainda sou um completo boneco...
 
Vovo4ka:
Gente! Estou tentando fazer, que negociaria muito, dependendo do risco.... o que não sai.... escreve

Favor informar onde está o erro....

Você tem apenas uma ordem do tipo certo em seu histórico comercial?

if(OrderProfit()>0) break;

Se há uma ordem que fechou em lucro - desistimos do loop e não verificamos o resto da história...

int    orders=HistoryTotal();     // history orders tota l

Esta é sua própria função? Ou OrdensHistóriaTotal()?

Estou confuso ao procurar o número de pedidos perdidos. Se você precisa do último pedido fechado, onde está o cheque para o último pedido?

Aqui está a lição de casa para sua própria análise:

int losses=0;
for (int i=0; i<OrdersHistoryTotal(); i++) {                // Цикл по истории терминала
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {         // Если ордер выбран ...
      if (OrderSymbol()!=Symbol())     continue;            // Если символ ордера не наш -  к следующему ордеру
      if (OrderType()>OP_SELL)         continue;            // Если тип ордера не наш -     к следующему ордеру
      if (OrderMagicNumber()!=Magic)   continue;            // Если магик ордера не наш -   к следующему ордеру
      if (OrderProfit()>=0)            continue;            // Если профит ордера в плюсе - к следующему ордеру
      if (OrderProfit()<0)                                  // Ордер закрыт в минусе ...
         losses++;                                          // Увеличиваем счётчик убыточных ордеров      
      }
   else if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {   // Если не удалось выбрать ордер ...
      Print("Error in history! ", GetLastError());          // Сообщим об ошибке и посмотрим её код
      break;                                                // Прерываем цикл перебора ордеров
      }
   }

E aqui está mais uma coisa:

if(ldlot<0.1) ldlot=0.1;

Mesmo assim, pode ser melhor fazer um controle por menos do que minimamente permitido?

double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (ldlot<MinLot) ldlot=MinLot;

E, ao mesmo tempo, é maior que o máximo (ao passar o tamanho do lote para a função)?

double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);
if (ldlot>MaxLot) ldlot=MaxLot;
 
doon:

Obrigado, mas você ainda terá que colocar um deslize lá dentro.

Eu não entendo, por que você precisa dele lá? Acho que é muito simples.
 
ZZZEROXXX:


Temo que se o Slippage for sempre alto, o CD poderá começar a abusar dele de forma sistemática.

Se o CD começar a abusar dele, nada ajudará. Aqui está outra coisa que pode funcionar. Se sua corretora tem spreads flutuantes, então é melhor usar a função com auto-determinação do tamanho do spread e o slippage deve ser ajustado para três spreads. Então, o escorregamento estará mudando dinamicamente.
 
Diga-me, se eu trabalhar com pedidos por bilhete, como escrever uma variável (int Ticket), como estática local ou como de costume global ou em geral, como de costume local? Estou confuso. Obrigado.
 
Fam:
Se trabalharmos com pedidos por bilhete, como escrever corretamente a variável (int Ticket), como uma variável local estática ou como uma variável global regular, ou geralmente como uma variável local regular? Estou confuso. Obrigado.

Tudo depende se esta variável estará disponível para todas as funções da EA (bem... não todas, mas algumas com certeza). Então, a variável é global.

Se for usado apenas em uma função, então é local.

A questão é como "em que água colocar as flores, simples ou adocicada" ... enquanto você adivinhava, as flores se tornaram uma vassoura, no banho. :))

 
ZZZEROXXX:


Temo que, se o Slippage for sempre alto, o CD possa abusar dele de forma sistemática. Eu gostaria de "escorregar" dinamicamente - somente se o preço no servidor for melhor do que o preço ao qual o pedido foi enviado. Seria semelhante à licitação manual - se o preço solicitado não estiver mais disponível, então será oferecida uma nova licitação que pode ser aceita pressionando OK ou rejeitada - se for a mesma situação, é claro.

Tente fazer o escorregamento depender primeiro da volatilidade. Em um mercado calmo será mínimo, em um mercado rápido se espalhará mais.
Razão: