[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 439

 
Anch'io a volte mi chiedo perché gli sviluppatori, invece di tutte queste sciocchezze, non potevano semplicemente fare due pulsanti nel terminale: "guadagnare" e "prosciugare". I problemi sarebbero ridotti di un ordine di grandezza.
 
Necron >>:

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

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

impostare un commento per ogni ordine ("lotto_1", "lotto_2"....), riconoscere gli ordini dal commento...

Se non è chiaro, allora scrivere più dettagli può essere descritto...

 
StatBars >>:

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

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

Grazie, StatBars! È che ho già iniziato a fare con la scelta del mago. La tua opzione penso che sarebbe come questa? (Confesso che mi sono ricordato che ce n'era uno simile in uno degli EA =)) Allora quale opzione è la più ottimale?

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

 
Necron >>:

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

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

Corretto un po'.

Di solito uso il magik e il simbolo per identificare gli ordini del "mio" EA.

Ho messo tutte le altre informazioni nel commento.

Non direi che questo sarebbe qualcosa di ottimale, perché non si può vedere cosa si farà con gli ordini più tardi e se altri 3 ordini possono aprire....

 
chief2000 >>:



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





Un enorme GRAZIE! Compilato tutto funziona, bip ad ogni tick.

Mia suocera non è ancora arrivata, ma semmai..., prenderò in considerazione questa idea)))

 

Scusate, ho una domanda: come bloccare programmaticamente un cliente.

Nella mia ricerca sulla decompilazione mi sono imbattuto nell'ambiguità della decompilazione. ora c'è la questione di come usarla.

Le scelte sono di mandare in crash il sistema.

o bloccare il decompilatore.

 
StatBars >>:

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

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

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

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

Grazie! Corretto nell'Expert Advisor alla tua variante. Finirò questo miracolo e lo caricherò su Code Base come mia prima creazione (più o meno seria)! Il sistema con cui scrivo l'Expert Advisor si chiama Muteki, ma è un po' con le mie aggiunte (per la gestione delle posizioni). È bene che almeno ci sia un indicatore, che costruisca tutte queste tendenze=)))

È sorta solo un'altra domanda. Come faccio ad aprire tre posizioni simultaneamente (o circa un preventivo)? È corretto o ci sono altri modi? Non posso farlo con i ciondoli=(( La piccola distanza a volte è troppo:(


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 funzione cerca l'ultimo lotto chiuso, se ha fatto una perdita, il suo lotto per aprire una nuova operazione sarà moltiplicato per due volte.

In pratica, ogni nuovo affare, indipendentemente dal fatto che l'affare sia stato redditizio o meno, viene raddoppiato nel lotto.


Domanda: cosa c'è che non va?

 
Summer:

Ricordo una funzione che stavo rifacendo. Ecco il codice. Lotti (in ordersend) =getLots(), koeff= fattore di incremento dei lotti (il default è 2) Solo fino a dieci lotti (da 0,1) ho ottenuto nel mio test=))))

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);
}

 

c'è un errore nella funzione, non riesco a trovarlo, è o con ( o con {

Ho allegato il codice.