Operar con spreads en Meta Trader - página 142

 

¡¡¡¡Amigos !!!! He decidido darme otro batacazo y escribir un EA basado en órdenes limitadas y estaré encantado de cualquier ayuda. Ya he abierto órdenes de límite basadas en las funciones de Kim. Actualmente estoy intentando obtener la media y las desviaciones basadas en las estadísticas de ticks(https://www.mql5.com/ru/forum/125272)(ya que creo que son más fiables) para abrir posiciones. Tendremos que implementar un módulo para mover las órdenes limitadas detrás del precio y un módulo para cerrar las posiciones cuando el beneficio llegue a un punto determinado.

 
Scorp1978 >>:

...... Надо будет реализовать модуль передвижки лимит ордера за ценой и модуль закрытия позиций при достижения профита определенного.

Aquí está el código para mover las órdenes. ¡La cerveza va por tu cuenta!

extern bool    Modify =True;
extern int     DistanceSet=14;//в пунктах
//-----------------------------------

if (Modify == true) {//если выключатель модификации включен
//если есть отложенный ордер и нет откр. одноименных позиций и
// расстояние от текущей цены превышает величину DistanceSet - модернизируем
// - т.е. подтягиваем к текущей цене
if(NumberOfOrders(NULL,OP_BUYLIMIT,Magic)>0 &&  NumberOfPositions(NULL,OP_BUY,Magic)<1){
  if( ExistOPNearMarket(NULL,OP_BUYLIMIT,Magic,DistanceSet)==0 ) { 
    for (int isl_= OrdersTotal()-1; isl_>=0; isl_-- )                  {
    if(OrderSelect(isl_,SELECT_BY_POS,MODE_TRADES))                 {
     if(OrderSymbol()==Symbol() )                                   {
      if(OrderType()==OP_BUYLIMIT && OrderMagicNumber()==Magic)      { 
      double pAsk=Ask-DistanceSet*Point;            
      if (sl!=0) double ldStop=pAsk-sl*Point;
      if (tp!=0) double ldTake=pAsk+tp*Point;         
     OrderModify(OrderTicket(), pAsk,ldStop,ldTake, 0, DarkGreen);
      Print("Modify OP_BUYLIMIT ");  Sleep(500);  RefreshRates(); }
      }}}}}
if(NumberOfOrders(NULL,OP_SELLLIMIT,Magic)>0 && NumberOfPositions(NULL,OP_SELL,Magic)<1){      
  if( ExistOPNearMarket(NULL,OP_SELLLIMIT,Magic,DistanceSet)==0 ) { 
   for (int isl= OrdersTotal()-1; isl>=0; isl-- )                  {
    if(OrderSelect(isl,SELECT_BY_POS,MODE_TRADES))                 {
     if(OrderSymbol()==Symbol() )                                   {
      if(OrderType()==OP_SELLLIMIT && OrderMagicNumber()==Magic)      { 
       double pBid=Bid+DistanceSet*Point;  
       if (sl!=0) double ldStop_=pBid+sl*Point;
       if (tp!=0) double ldTake_=pBid-tp*Point; 
     OrderModify(OrderTicket(), Bid+DistanceSet*Point,ldStop_,ldTake_, 0, DarkGreen);
      Print("Modify OP_SELLLIMIT");  Sleep(500);  RefreshRates(); }
      }}}}}            
}//выключатель модификации 
Donde, - Función ExistOPNearMarket() -
/Esta función devuelve un indicador de la existencia de una orden o una posición cerca del mercado
//(a una distancia determinada en pips del mercado). Una selección más precisa de las órdenes o posiciones a comprobar
Las órdenes o posiciones que deben ser //comprobadas se establecen mediante parámetros externos:
//sy - Nombre del instrumento. Si se establece este parámetro, la función verificará
comprobar las //órdenes o posiciones de sólo el símbolo especificado. "" o NULL significa
//Símbolo actual.
//op - Operación comercial, tipo de orden o posición. Valores válidos: OP_BUY,
// OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP o -1.
//El valor por defecto de -1 significa cualquier operación comercial.
//mn - Identificador de orden o posición (MagicNumber). Valor por defecto -1
// - cualquier identificador.
//ds - Distancia del mercado en pips. El valor por defecto es 1000000.
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь                                                                |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает флаг существования позиции или ордера около рынка |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| op - торговая операция ( -1 - любая операция) |
//| mn - MagicNumber ( -1 - любой магик) |
//| ds - расстояние в пунктах от рынка ( 1000000 - по умолчанию) |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;
  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  ot=OrderType();
  if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
  if (mn<0 || OrderMagicNumber()==mn) {
  if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
  if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
  }
  if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
  if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
  }}}}} return(False); }

Y la función NumberOfOrders() -
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }}}}  return(ko);}                        
 
rid


¡¡¡¡¡muchas gracias, crunch me ha dado la función para calcular la media de los ticks con cualquier periodo le he prometido una cerveza también, tendré que llenar una caja de una vez :)))) me gustaría no estar demasiado borracho de alegría yo mismo!!!!!

 
Hoy he recibido una carta en el correo de mt4 B.
//-----------------------------
"Estimados clientes, les informamos que a partir del 14 de abril de 2010, entrará en vigorla acción correspondiente a la cláusula 1.3.6. del Anexo, Acuerdo BT-08.
1.3.6 Fijación del balance.
1.3.6.1 El proceso de fijación de la balanza comercial se realizará diariamente, antes del proceso de devengo de los swaps.
Este procedimiento consiste en el cálculo automático del resultado financiero de todas las operaciones realizadas y su comparación con el saldo actual de la cuenta comercial. Si hay una discrepancia, el saldo de la cuenta comercial se corregirá por el importe de la discrepancia.
A partir de este momento, el procedimiento de fijación de la balanza se realizará diariamente.
En casode discrepancias en el resultado financiero de la cuenta de operaciones después de este procedimiento, puede ponerse en contacto con el departamento de asistencia técnica ....."
//------------------------------------------------
No consigo entender qué demonios es esto.
¿Cuál es la diferencia de importes? ¿De dónde puede venir en teoría?
¿De qué estamos hablando?
И - ".... el saldo de la cuenta comercial se ajustará" - ¿cómo?

 

Temo equivocarme, pero la cláusula 1.3.6.1 del acuerdo BT-08, da a la empresa otra oportunidad de picar a los clientes.
¿De dónde pueden venir teóricamente las discrepancias?
Hay dos posibilidades.
La primera es que si sus órdenes se han ejecutado a precios que no son de mercado (ya sabe, picos y otros fallos) - la empresa decidirá el destino de dicha otder y determinará qué es "precio de no mercado". Pero esto no ocurre muy a menudo y no es tan grave.
La segunda opción es más importante para el comerciante. Imaginemos que en el momento de la fijación, la empresa ampliará los márgenes de negociación. Significa que en todas sus posiciones abiertas el beneficio total disminuirá, y esta diferencia se deducirá del saldo. Este procedimiento será realizado por la empresa al final de cada día de negociación, y será como un canje oculto... Ningún diablo, ningún diablo puede impedir que la empresa haga eso... es la anfitriona del CFD...

Por supuesto, a todo el mundo le gustaría creer en la integridad de la empresa y en que no va a hacer trampas de este tipo... el tiempo lo dirá..., pero hay que encontrar algún lugar para recaudar fondos para los litigios en el extranjero y los costosos abogados...

 
GEFEL >>:

.....
Второй вариант более важен для трейдера. Представим себе, что на момент фиксинга, компания будет раздвигать торговые спреды. Это значит, что по всем Вашим открытым позициям суммарный профит будет уменьшаться, и эта разница будет списываться с баланса... Такую процедуру компания будет проводить в конце каждого торгового дня, - и это будет похоже на скрытое свопирование........

Estoy pensando en .....
Los diferenciales se amplían bastante todos los días al cierre diario de la sesión (para aquellos instrumentos en los que hay una pausa entre las sesiones diarias, es decir, casi todas las materias primas y los futuros - para nuestra metodología de negociación).
No está del todo claro. En esta situación, los fondos propios (fondos) disminuirían temporalmente, pero no el saldo.
Las posiciones permanecen abiertas y el balance no puede cambiar de ninguna manera.
Y si este diferencial "ampliado" (cuando se abre una nueva sesión) se anota en el balance, es difícil de comprender.
Tengo que guardar un ESTADO DETALLADO cada noche, y compararlo escrupulosamente con un "nuevo balance" por la mañana...
Parece que sí.

 
Un amigo ha planteado la pregunta al servicio técnico.
Recibirá una respuesta.
http://www.procapital.ru/showthread.php?p=649145#post649145
 
rid писал(а) >>
Un conocido ha planteado la pregunta al servicio técnico.
Recibirá una respuesta.
>> http://www.procapital.ru/showthread.php?p=649145#post649145


También he leído la respuesta del servicio técnico y entiendo que no pasará nada (ojalá)

 

Saldo = fondos + beneficios totales de las posiciones abiertas...

 

Y esta frase en la respuesta, resaltada en rojo, no te molesta... Una vez más, las operaciones cerradas no se verán afectadas por esto, todas sus cifras seguirán siendo las mismas. Sólo se comprueba el saldo final de la cuenta.
Por supuesto, nadie iba a arreglar las posiciones ya cerradas. Esto sería un robo. Pero podrían entrar en las abiertas...
No tengo un real en B ... y yo tipo de no me importa, pero realmente aconseja a organizar una conciliación de la noche y el balance de la mañana ...