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

 
Yo también me pregunto a veces por qué los desarrolladores, en lugar de tanta tontería, no podían limitarse a hacer dos botones en el terminal: "ganar" y "drenar". Los problemas se reducirían en un orden de magnitud.
 
Necron >>:

Добрый всем! В общем проблема следующего плана. Есть тс, по которой нужно открывать позицию тройным лотом, после чего каждый лот сопровождается отдельно(со своим TP, сигналом закрытия). Интересуют способы реализации. Мне на ум пришел такой способ: использовать три отложенника, запоминать их тикеты, а потом каждый отдельно выбирать и закрывать по своему условию. Есть ли какие-либо другие способы (или более удобные)?

PS. Поймите правильно, около месяца назад только своего первого советника на машках написал=)))))

establecer un comentario para cada orden ("lote_1", "lote_2"....), reconocer las órdenes a partir del comentario...

Si no está claro, entonces escriba más detalles puede ser descrito...

 
StatBars >>:

установите каждому ордеру свой коммент("lot_1","lot_2"....), по коменту распознавайте ордера...

Если не понятно то пишите подробнее можно будет описать...

¡Gracias, StatBars! Es que ya he empezado a hacer con la elección del mago. Su opción creo que sería así? (Confieso que recordé que había uno similar en uno de los EAs =)) Entonces, ¿qué opción es la más óptima?

if ( (OrderSymbol() == Symbol()) &&
(StringSubstr(OrderComment(),0,0) == "lot_1") )

 
Necron >>:

Спасибо, StatBars! Просто я уже начал делать с выбором по магику. Ваш вариант думаю так будет выглядеть? (признаюсь, вспомнил что в одном из советников было похожее =)) Тогда какой вариант наиболее оптимален?

if ( (OrderSymbol() == Symbol()) &&
(StringFind(OrderComment(),"lot_1") >= 0) )

Corregido un poco.

Suelo utilizar el magik y el símbolo para identificar "mis" órdenes de EA.

El resto de la información la pongo en el comentario.

Yo no diría que esto sería algo óptimo, porque no se puede ver lo que se va a hacer con las órdenes más tarde y si otras 3 órdenes pueden abrirse....

 
chief2000 >>:



Будет срабатывать на каждом тике пока выполняется условие. Небось код для тещи переделываете? :)





¡Un enorme agradecimiento! Compilado todo funciona, emite un pitido en cada tic.

Mi suegra aún no ha llegado, pero si acaso..., me apunto esta idea))

 

Lo siento, hay una pregunta. cómo colapsar un cliente programáticamente.

En mi investigación sobre la descompilación me encontré con la ambigüedad de la descompilación. ahora se plantea la cuestión de cómo utilizarla.

Las opciones son estrellar el sistema.

o colgar el descompilador.

 
StatBars >>:

Поправил немного.

Магик и символ обычно использую для идентификации "своих" ордеров эксперта.

Всю остальную информацию запихиваю в коммент.

Я бы не сказал что тут будет что-то оптимальнее, не видно же что Вы потом будуте делать с ордерами и может ли открыться ещё одна 3-ка ордеров....

Gracias. Corregido en el Asesor Experto a su variante. Terminaré este milagro y lo subiré a Code Base como mi primera creación (más o menos seria)) El sistema por el que escribo el Asesor Experto se llama Muteki, pero es un poco con mis adiciones (para la gestión de la posición). Es bueno que al menos haya un indicador, que construya todas estas tendencias=)))

Sólo ha surgido otra cuestión. ¿Cómo puedo abrir tres posiciones simultáneamente (o aproximadamente una cotización)? ¿Es correcto, o hay otras formas? No puedo hacerlo con colgantes=(( La distancia pequeña es a veces demasiado:(


if(b1==0 && !IsTradeContextBusy())
{
if(Low[0]<HHL_1 && Bid>=HHL_1 && trade_buy==true)
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage*PointX,sl_b,BuyTarget1,"lot_1_buy",Magic,0,Lime);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("lot_1_buy order opened : ",OrderOpenPrice());
b1=1;
}
else Print("Error opening BUY order : ",GetLastError());

return(0);
}
}

 
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==16384){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
          time=OrderCloseTime();
          profit=OrderProfit();
          
            //мартин
            if( profit<=0) Lots=OrderLots()*2;
            //----
            
            
          }
        }
      }
    }
  }
}
//-----

La función busca el último lote cerrado, si tuvo pérdidas, su lote para abrir una nueva operación se multiplicará por dos.

En la práctica, cada nueva operación, independientemente de que haya sido rentable o no, se duplica en el lote.


Pregunta: ¿qué ocurre?

 
Summer:

Recuerdo una función que estaba rehaciendo. Aquí está el código. Lotes (en ordersend) =getLots(), koeff= factor de incremento del lote (por defecto es 2) Sólo hasta diez lotes (desde 0.1) tengo en mi prueba=))))

double getLots() {

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
int round;
if(minlot==0.01)round=2;
if(minlot==0.1) round=1;
double koeff=2;
double result=Lots;

int total = OrdersHistoryTotal();
double spread = MarketInfo(Symbol(), MODE_SPREAD);

for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderProfit() > 0)
{
result = Lots;

} else {
result = OrderLots() * koeff;

}
}
}
result = NormalizeDouble(result, round);
if (result > maxlot) {
result = maxlot;
}
if (result < minlot) {
result = minlot;
}
RefreshRates();
return(result);
}

 

hay un error en la función, no lo encuentro, es con ( o con {

Adjunto el código.

Razón de la queja: