[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 386

 

Por la tarde.

1. ¿Cómo se expresa el resultado de una operación, es decir, si ha sido rentable o con pérdidas? Por ejemplo, el último...

2. ¿Cómo hacer una operación virtual y tener en cuenta su resultado (signo)?

 
inoy:

Por la tarde.

1. ¿Cómo se expresa el resultado de la operación, es decir, si ha sido rentable o no? Por ejemplo, el último...

2. ¿Cómo realizar una transacción virtual y contabilizar su resultado (signo)?

1. Mira estas 2 funciones:

isCloseLastPosByStop
isCloseLastPosByTake

2. Hay una forma muy sencilla de realizar un comercio virtual. Aumente la cantidad de su depósito en 100 veces, digamos que en lugar de las consabidas 1000 libras tome 100000. Y los lotes de una posición virtual se reducen al límite - a 0,01, por ejemplo, con un lote de trabajo, como 10. 0,01 de 10 -es decir, una décima parte del uno por ciento- pérdidas y beneficios completamente imperceptibles.

Marca de la transacción: isLossLastPos

 
sss2019:

Ayúdame a resolver el problema, ¿por qué si el bucle tiene sólo 2 pasadas i primero es igual a 0 y luego inmediatamente es igual a 4?

A partir de este script la alerta sale 0, 4.

Bueno, tal vez sea patamushta:

for(i=0,g=0,c=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
    if(OrderMagicNumber() == MasterMagicNumber)     // а других точно нет?
      {
.............
      Alert(i);
.............
      }
.............
    }

Tal vez sea mejor así:

for(i=0,g=0,c=0;i<OrdersTotal();i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
    Alert(i);
    if(OrderMagicNumber() == MasterMagicNumber)
      {
      starttime = OrderOpenTime();
      ArrayResize(prices,ArraySize(prices)+TradesCount);
      if(OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES))
      if(OrderMagicNumber() == MasterMagicNumber) endtime = OrderOpenTime();
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      times[i] = starttime;
      times[i+1] = endtime;
      tickets[i] = OrderTicket();
      symbol = OrderSymbol();
      while(g < TradesCount*(i+1))
        {
        if(OrderType() == OP_BUY)
          {
          if(g == TradesCount*i)
            {
            prices[g] = OrderOpenPrice()-LowOpen*Point;
            }else
            {
            prices[g] = prices[g-1]-step*Point;
            }
          }
        if(OrderType() == OP_SELL)
          {
          if(g == TradesCount*i)
            {
            prices[g] = OrderOpenPrice()+HighOpen*Point;
            }else
            {
            prices[g] = prices[g-1]+step*Point;
            }
          }
        g++;
        }
      }
    }
 
DmitriyN:

1. Comprueba estas 2 funciones:

isCloseLastPosByStop
isCloseLastPosByTake

2. Para un comercio virtual hay una forma muy sencilla. Aumente el importe de su depósito en 100 veces, digamos que en lugar de las consabidas 1000 libras tome 100000. Y los lotes de una posición virtual se reducen al límite - a 0,01, por ejemplo, con un lote de trabajo, como 10. 0,01 de 10 -es decir, una décima parte del uno por ciento- apenas se notan las pérdidas y las ganancias.

Signo de la operación: isLossLastPos


Gracias. Pero debe haber una opción más elegante para las entradas virtuales, seguramente. "Aumentar el tamaño del depósito por un factor de 100" - Me temo que no tengo esa opción en la vida real)). Profesionales, ¡no lo dejéis pasar!
 
inoy:

Gracias. Pero debe haber una opción más elegante para las entradas virtuales, seguramente. "Aumentar el tamaño del depósito por un factor de 100" - Me temo que no tengo esa opción en la vida real)). Profesionales, ¡no lo dejéis pasar!

https://www.mql4.com/ru/search#!keyword=%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D1%82%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D0%BB%D1%8F&module=mql4_module_articles
 
Vinin:

https://www.mql4.com/ru/search#!keyword=%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D1%82%D0%BE%D1%80%D0%B3%D0%BE%D0%B2%D0%BB%D1%8F&module=mql4_module_articles

Gracias.
 
DhP:

Pruébalo así:

bool GO = true;// глобальная переменная
//---------------------

if(GO && SignalType_1 && RSI >= 35 && Stoch >= 20 && CCI >= -100) {GO=false; return(+1);}//запретить повторный вход
//---------------
{OrderClose(.......); GO = true; }//открыть семафор при закрытии позиции.

Buenas tardes.Intenté arreglarlo ahora el búho hace que sólo una operación se cierre con el stop loss y ya está.No se abren otras operaciones.Dime qué pasa

Archivos adjuntos:
 
artemka_1981:

Buenas tardes.Intentó arreglar ahora búho hace sólo un comercio se cierra en la pérdida de la parada y eso es it.no otros oficios open.tell mí lo que está mal

if(OrdersTotal()==0)GO=true;
 
// < 0 - Dn
// > 0 - Up
int Signal()
{
double RSI = iRSI(NULL,15,RSIperiod,RSI_price,SignalBar);
double Stoch = iStochastic(NULL,15,Stoch_K,Stoch_D,Stoch_slowing,Stoch_method,Stoch_price,Stoch_mode,SignalBar);
double CCI = iCCI(NULL,15,CCI_period,CCI_price,SignalBar);

double MA2 = iMA(NULL,15,ma2_period,ma2_shift,ma2_method,ma2_price,SignalBar);
double IchiA = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 3, SignalBar);
double IchiB = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 4, SignalBar); 

    if(GO && SignalType_1 && RSI >= 65 && Stoch >= 80 && CCI >= 100) {GO=false; return(+1);}//запретить повторный вход (+1);
    if(GO && SignalType_2 && Bid >= MA2 && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход return(+1);
    if(GO && SignalType_3 && Bid >= IchiA && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход (+1);
    
   
    
    if(GO && SignalType_1 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_2 && Ask <= MA2 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_3 && Ask <= IchiB && RSI <= 35 && Stoch <= 20&& CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    
    if(OrdersTotal()==0)GO=true;
    
    return(0);
}
DhP:

Hola. No funciona nada. Lo siento, está bien. Sólo me confundí. Muchas gracias.
 
Hola. La función iMaOnArray utiliza una matriz de datos previamente preparada, que se escribe en esta función sin corchetes. ¿Y si esta matriz es bidimensional? (por ejemplo, Mas[4][100], es decir, 4 matrices independientes de 100 puntos cada una)