[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 388

 
7777877:

Buon pomeriggio. Perché c'è un parametro MODE_MARGINREQUIRED tra gli identificatori di richiesta di MarketInfo per determinare la quantità di fondi liberi necessari per aprire 1 lotto per l'acquisto, ma non c'è alcun parametro per determinare la quantità di fondi liberi necessari per aprire 1 lotto per la vendita? E come determinare quanti fondi liberi sono necessari per aprire 1 lotto da vendere in una o un'altra società di intermediazione?

P.S. Per non ingombrare il forum, grazie in anticipo per la risposta.

Hai bisogno di un po' meno soldi per vendere, quindi in pratica puoi usare questo parametro.
 

Puoi dirmi se è possibile mettere gli EA in cartelle invece di memorizzarli tutti in una cartella...\esperti?

E che lavorano anche da queste cartelle.

Ho 20 versioni di un EA e 20 di un altro, ed è impossibile sbloccare il set completo di file.

 

Buon pomeriggio.

La ricerca non ha aiutato.

Forse qualcuno ha visto un copione simile.

Il punto: lo script specifica: simbolo, acquisto/vendita, volume

ci dovrebbero essere 5-7 campi di questo tipo.

per l'apertura simultanea su diversi simboli, il cui volume non è uguale a 0.

grazie.

Sinceramente.

 
Buon pomeriggio. Ho una domanda per te.... Entrata tramite stocastico (5,14,3) uscita anche tramite stocastico ma con un altro periodo (5,3,3). Non so come posso usare lo stocastico per l'uscita, ma non il segnale di ritorno.
Ho un problema e non ho idea di come possa essere risolto, cercherò di spiegarlo.
Quindi, nel codice che ho postato, ci sono 2 funzioni
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
Nel void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) dobbiamo mettere una condizione che decida se dobbiamo lasciare o chiudere l'ordine.
Ho provato a mettere delle condizioni ma non funziona niente....
Qualcuno può guardare e mostrare se c'è un errore in queste funzioni o se ho fatto casino....
File:
 
Snegovik:

Buon pomeriggio.

La ricerca non ha aiutato.

Forse qualcuno ha visto un copione simile.

Il punto: lo script specifica: simbolo, acquisto/vendita, volume

ci dovrebbero essere 5-7 campi di questo tipo.

per l'apertura simultanea su diversi simboli, il cui volume non è uguale a 0.

grazie.

Sinceramente.


Questa è una bella parola. Quello che l'interrogante chiede...
 
belous:
Buon pomeriggio. Ho una domanda per te.... Entrata tramite stocastico (5,14,3) uscita anche tramite stocastico ma con un altro periodo (5,3,3). Non capisco come posso usare lo stocastico per l'uscita, ma non il segnale di ritorno.
Ho un problema e non ho idea di come possa essere risolto, cercherò di spiegarlo.
Nel codice che ho esposto, ci sono 2 funzioni
Nel void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) dobbiamo mettere una condizione che decida se dobbiamo lasciare o chiudere l'ordine...
Ho provato a mettere delle condizioni ma non funziona niente....
Qualcuno può guardare e mostrare se c'è un errore in queste funzioni o se ho sbagliato ....


Forse sarà utile. Non ho guardato il tuo codice.
Le funzioni di Kim.

  //========================================================================================================================
  // Закрытие открытых позиций на продажу 
  //-------------------------------------------------------------------------------------------------------------------------
  if(ExistPositions(NULL, OP_SELL, Magic, 0) == true) //если открыта позиция sell
  {
    if() // условие на закритие 
    {
      ClosePosFirstProfit(NULL, OP_SELL, Magic); //закрываем позицию
    }
  } 


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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double ll, pa, pb, pp;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), err, it;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) //break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=clCloseBuy;
      } else {
        pp=pa; clClose=clCloseSell;
      }
      ll=OrderLots();
      pp=NormalizeDouble(pp, dg);
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        if (UseSound) PlaySound(SoundSuccess); //break;
      } else {
        err=GetLastError();
        if (UseSound) PlaySound(SoundError);
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
              ErrorDescription(err),", try ",it);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();
  if (sy=="0") sy=Symbol();

  // Сначала закрываем прибыльные позиции
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
          }
        }
      }
    }
  }
  // Потом все остальные
  k=OrdersTotal();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        }
      }
    }
  }
}
 
 
belous:
Buon pomeriggio. Ho una domanda per te.... Sto entrando con lo stocastico (5,14,3) e uscendo con lo stocastico solo con un altro periodo (5,3,3). Non capisco come posso usare lo stocastico per l'uscita, ma non il segnale di ritorno?

Imho, non creerei un array di ticket da chiudere, ma nel ciclo di enumerazione degli ordini di mercato controllerei ogni ordine alimentando il suo ticket all'input della funzione di chiusura con un controllo delle condizioni possibili.

 
L'offerta può essere 0 in qualsiasi punto?
 
YOUNGA:
L'offerta può essere 0 in qualsiasi punto?
È difficile da controllare o è pigro? È più facile fare la domanda. Il prezzo dell'offerta può essere zero? Può se non si vende nulla8-(
 
drknn:

La formulazione è molto buona. Quello che l'interrogante chiede...


ci sono script che aprono contemporaneamente la vendita su un simbolo sul secondo acquisto.

Sono interessato a uno script che possa aprire simultaneamente una vendita/acquisto su 7-10 simboli, con un volume specificato per ogni simbolo, ai prezzi correnti.

Esempio:

vendere EURUSD 1

comprare GBPUSD 1.5

vendere USDCAD 1.2

comprare AUDUSD 1.1

comprare NZDUSD 2

comprare USDCHF 3

Lo script MultiOrders è quasi perfetto, solo che ci sono 5 campi per i simboli.