[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 548

 
harvest:
Señores, me podrían dar un ejemplo de la función que mueve una posición abierta al punto de equilibrio (trabajo en el tick), mi Asesor Experto tiene un arrastre, el inicio de este arrastre es sólo después de la función de rollover para comprar. Gracias de antemano.


Ver el trailer - la biblioteca de arrastre por Yury Dzyuban - en particular, cómo se resuelve la cuestión de si la red de arrastre se ejecuta sólo desde el beneficio, es decir, si el valor de la variable trlinloss = false, si la red de arrastre se ejecuta en la zona de pérdida. Edita tu función de arrastre según este ejemplo y ya está.

Archivos adjuntos:
 

Amigos, ¿pueden decirme por qué el clásico Martin no funciona? ¡¡Sólo abre ofertas para comprar!! Hace un mes que me meto con él, ¡cero emoción! Funciona bien en el Probador de Estrategias, pero no en la demo. Otra cosa interesante - cuando pongo T/S y T/P 1000 - se abre sólo en la Compra, y cuando pongo 200 - en la Compra y la Venta... Hombre, ¿cuál es la diferencia?

aquí está el código: ayuda plz

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

Entonces se vuelve aún más confuso. Supongamos que compro un euro por 1 000 000 (1k) de dólares (el broker lo multiplica por 100 como resultado la operación sale por 100k) el gráfico salta 100 puntos hacia arriba y los vendo y estoy en el lado positivo por 10 000 dólares bien allí la comisión del broker y el spread como resultado 6000 $ netos en mi bolsillo. ¡¡¡¡(Está claro que después de la venta, volverá a caer 100 puntos.) Esto es un disparate!!!! ¿Tal vez se caiga al fondo después de todo? De lo contrario, los grandes actores ganarían miles de millones sin hacer nada.


Entonces no sé...

En general, la cosa es probablemente que para un movimiento de precios notable es necesario comprar o vender por una cantidad muy grande, MUY grande. Para tales sumas, el apalancamiento no es 1/200, como yo, sino 1/2 en sentido figurado. Bueno, esto es puramente personal. Puedo escribir esas tonterías...

 
Hay una cosa que me sorprende. He publicado el código aquí antes, había un error, me ayudó a arreglarlo, Sepulca ayudó, gracias a ella, hasta que ahora el código todo funciona... Pero sigo sin entender el rompecabezas: en el primer bucle el selector de órdenes seleccionó una orden, no hubo error, y luego, cuando seleccioné la misma orden en otra línea, abajo, el selector de órdenes mostró error? Si puedes, échale un vistazo, tengo curiosidad.
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

¡No puede ser! ¿Por qué no? No había órdenes abiertas en el momento del rebasamiento. Tal vez no lo entienda.

¡El ciclo de búsqueda también está en la historia! ¡Ahí es donde lo asigno a la variable int ticket!

Y jura, perdón, 2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30: Alerta: SELL error HISTORYticket 4105

¿Cuándo se pasa de MODE_HISTORY a MODE_TRADES?

Y lo más importante, selecciono la misma orden en el historial con la ayuda de order select, y queda seleccionada en primer lugar, de lo contrario no podría trabajar con ella. No hay lógica!!!!!! Estoy sorprendido.


 
Me puede decir donde puedo encontrar tal EA o script... Hay un grupo de órdenes (9-11) colocadas a ambos lados del precio a una distancia de 5-7 pips del mismo. el tiempo para activarlas es estrictamente limitado. por lo tanto, muy a menudo las órdenes no se cogen y se eliminan. las órdenes se colocan a primera hora de la mañana, por regla general, el mercado está muy plano. quiero que el segundo grupo de órdenes siga al precio cuando se acerque a uno de los grupos de órdenes. en pocas palabras, un rastro de órdenes pendientes con tp y sld. ¿es esto posible? muchas gracias de antemano.
 

¡Necesito ayuda!

Tengo el siguiente bloque en mi EA (Contador de Eventos):

if (isCloseLastPosByStop()==True) //Si la última orden fue cerrada por Stop

{
N=N+1;
Alerta(N, " alce");
} si no N=0;

PREGUNTA: ¿cómo escribir los datos en un archivo (excel) en lugar de mostrarlos en la pantalla?

 

Buenas tardes.

Por favor, indique por qué no se dibujan las flechas, código:

ObjectCreate("miniDown", OBJ_ARROW, 0, Time[1], Open[1]);
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241);
ObjectSet("miniDown", OBJPROP_COLOR, Yellow);

 

Supongamos que el EURUSD=1,44757 y el GBPUSD=1,63366, y queremos que estén cerca el uno del otro.

Déjeme explicarle:

a=GBPUSD/EURUSD=1,12855336874901 aproximadamente 1,12855 ,

Es decir, si quiero comprar/vender una moneda para que la operación sea aproximadamente igual en valor, entonces

Necesito comprar/vender EURUSD*a, pero no existe tal lote, por lo que mi pregunta es ¿cómo implementarlo, el cálculo del lote?

No tengo tanto, así que mi pregunta es ¿cómo hacerlo?

 
T-G:
Quiero compartir la función para calcular el lote máximo permitido, teniendo en cuenta las posiciones abiertas, es decir, utilizando el patrimonio. La función estándar calcula el riesgo, pero si tengo operaciones, no tengo suficiente dinero para abrirlas

Lo escribí para un EA personalizado:

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

Para ajustar el lote, es necesario llamar a la función, insertando como parámetro lt el lote que desea abrir una posición, y en lugar del parámetro Part - el número por el que se dividirán los fondos libres utilizados en la operación. Es decir, para negociar sólo la mitad de los fondos libres, la Parte debe tener un valor de 2, si un tercio, entonces 3, un cuarto - 4, etc.

double Lot=CorrectLots(0.1, 2);

Después de llamar a la función, inserte Lot como parámetro de la función OrderSend();

La función limita los lotes en un EA con un Martin duro y evita los lotes perdedores. Pero la rentabilidad también estaba cayendo...

 
respuesta a mi anterior, no entiendo que pasa ahí =(
Razón de la queja: