[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 227

 
drknn:

Aumenta el deslizamiento. Las operaciones deben haberse abierto en un mercado rápido. A veces pasa después de noticias importantes que los eurobucks son tan rápidos en 1-2 ticks que es una pesadilla. Y mientras el servidor está procesando la orden del EA el precio cambia muy bruscamente.


Me temo que si el deslizamiento es siempre grande, el DT puede empezar a abusar de él de forma sistemática. Sería deseable "moverlo" dinámicamente, sólo si el precio en el servidor es mejor que el que se envió la orden. Sería similar a la puja manual - si el precio solicitado ya no está disponible, entonces se ofrecerá uno nuevo que puede ser aceptado pulsando OK o rechazado - si es la misma situación, por supuesto.

 

Hola a todos. Por favor, ayúdame a combinar las siguientes cosas. El resultado debería ser: dos líneas siguiendo el precio, una más baja que Ask por 20 pips..,

el otro es más alto. Además, recibo un pitido si el precio cambia 20 puntos por 1 tick.

Todo funciona bien por separado. Gracias de antemano.

1) La línea por debajo del Ask 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) La línea está 20 pips por encima del 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) Tasa de variación de los precios en el tiempo.

#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:

Como si un petroso inteligente quisiera hacer una broma...))

Lo siento, el dinero es tuyo. Cuantos más seáis, mejor estaremos.
 
ScioMe:

El MetaEditor tiene un indicador iMA estándar. Siéntase libre de utilizarlo :)
Por favor, díganme dónde conseguirlo y dónde ponerlo, sigo siendo un completo dummie...
 
Vovo4ka:
¡Gente! Estoy tratando de hacer, que el comercio mucho dependiendo del riesgo.... lo que no sale....escribe

Por favor, indique dónde está el error....

¿Tiene una sola orden del tipo correcto en su historial de operaciones?

if(OrderProfit()>0) break;

Si hay una orden que se cerró en beneficio - salimos del bucle y no comprobamos el resto del historial...

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

¿Esta es su propia función? ¿O OrdersHistoryTotal()?

Me confunde buscar el número de órdenes perdidas. Si necesita el último pedido cerrado, ¿dónde está el cheque del último pedido?

Aquí están los deberes para su propio análisis:

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;                                                // Прерываем цикл перебора ордеров
      }
   }

Y aquí hay una cosa más:

if(ldlot<0.1) ldlot=0.1;

¿Puede todo lo mismo es mejor para hacer el cheque por menos de lo mínimamente admisible?

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

Y al mismo tiempo, ¿es mayor que el máximo (al pasar el tamaño del lote a la función)?

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

Gracias, pero aún así tendrás que poner un resbalón allí.

No lo entiendo, ¿por qué lo necesitas ahí? A mí me parece sencillo.
 
ZZZEROXXX:


Me temo que si el deslizamiento es siempre alto, el DC podría empezar a abusar de él de forma sistemática.

Si el DC empieza a abusar de ella, nada servirá. Aquí hay otra cosa que podría funcionar. Si su empresa de corretaje tiene spreads flotantes, entonces es mejor utilizar la función con autodeterminación del tamaño del spread y el deslizamiento debe ser fijado en tres spreads. Entonces el deslizamiento cambiará dinámicamente.
 
Dime, si trabajo con pedidos por ticket, ¿cómo escribir una variable (int Ticket), como local estática o como global habitual o en general, como local habitual? Estoy confundido. Gracias.
 
Fam:
Por favor, si trabajamos con pedidos por ticket, ¿cómo escribir correctamente la variable (int Ticket), como local estática o como global normal, o en general como local normal? Estoy confundido. Gracias.

Todo depende de si esta variable estará disponible para todas las funciones de EA (bueno... no todas, pero algunas seguro). Entonces la variable es global.

Si sólo se utiliza en una función, entonces es local.

La pregunta es como "en qué agua poner las flores, en agua simple o endulzada"... mientras adivinaba, las flores se convirtieron en una escoba, en el baño... :))

 
ZZZEROXXX:


Me temo que si el deslizamiento es siempre alto, el DC puede abusar de él de forma sistemática. Me gustaría "deslizarlo" dinámicamente - sólo si el precio en el servidor es mejor que el precio al que se envió la orden. Sería similar a la puja manual - si el precio solicitado ya no está disponible, entonces se ofrecerá uno nuevo que puede ser aceptado pulsando OK o rechazado - si es la misma situación, por supuesto.

Intenta que el deslizamiento dependa primero de la volatilidad. En un mercado tranquilo será mínimo, en un mercado rápido se extenderá más.