[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 388

 
7777877:

Bon après-midi. Pourquoi y a-t-il un paramètre MODE_MARGINREQUIRED parmi les identificateurs de requête de MarketInfo pour déterminer le montant des fonds libres nécessaires pour ouvrir 1 lot à l'achat, mais il n'y a pas de paramètre pour déterminer le montant des fonds libres nécessaires pour ouvrir 1 lot à la vente ? Et comment déterminer le montant des fonds libres nécessaires pour ouvrir un lot à vendre dans l'une ou l'autre société de courtage ?

P.S. Afin de ne pas encombrer le forum, merci d'avance pour la réponse.

Vous avez besoin d'un peu moins d'argent pour vendre, donc en pratique vous pouvez utiliser ce seul paramètre.
 

Pouvez-vous me dire s'il est possible de mettre les EAs dans des dossiers au lieu de les stocker tous dans un seul dossier...\experts ?

Et qu'ils travaillent aussi à partir de ces dossiers.

J'ai 20 versions d'une EA et 20 d'une autre, et il est impossible de débloquer l'ensemble des fichiers.

 

Bon après-midi.

La recherche n'a pas aidé.

Peut-être que quelqu'un a vu un scénario similaire.

Le point : le script spécifie : symbole, achat/vente, volume

il devrait y avoir 5 à 7 champs de ce type.

pour une ouverture simultanée sur plusieurs symboles, dont le volume n'est pas égal à 0.

Merci.

Sincèrement.

 
Bon après-midi. J'ai une question pour vous.... Entrée par stochastique (5,14,3) sortie également par stochastique mais avec une autre période (5,3,3). Je ne sais pas comment je peux utiliser la stochastique pour la sortie, mais pas pour le signal de retour.
J'ai un problème et je n'ai aucune idée de la façon dont il peut être résolu, je vais essayer de vous expliquer.
Ainsi, dans le code que j'ai posté, il y a 2 fonctions
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
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;
}
Dans void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) nous devons mettre une condition qui décidera si nous devons laisser ou fermer l'ordre.
J'ai essayé de mettre des conditions mais rien ne fonctionne....
Quelqu'un peut-il regarder et montrer s'il y a une erreur dans ces fonctions ou si je me suis trompé ? ....
Dossiers :
 
Snegovik:

Bon après-midi.

La recherche n'a pas aidé.

Peut-être que quelqu'un a vu un scénario similaire.

Le point : le script spécifie : le symbole, l'achat/la vente, le volume...

il devrait y avoir 5 à 7 champs de ce type.

pour une ouverture simultanée sur plusieurs symboles, dont le volume n'est pas égal à 0.

Merci.

Sincèrement.


C'est un sacré libellé. Ce que le questionneur demande...
 
belous:
Bon après-midi. J'ai une question pour vous.... Entrée par stochastique (5,14,3) sortie également par stochastique mais avec une autre période (5,3,3). Je ne comprends pas comment je peux utiliser la stochastique pour la sortie, mais pas pour le signal de retour.
J'ai un problème et je n'ai aucune idée de la façon dont il peut être résolu, je vais essayer de vous expliquer.
Dans le code, que j'ai exposé, il y a 2 fonctions
Dans void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) nous devons mettre une condition qui décidera si nous devons laisser ou fermer l'ordre...
J'ai essayé de mettre des conditions mais rien ne fonctionne....
Quelqu'un peut-il regarder et montrer s'il y a une erreur dans ces fonctions ou si je me suis trompé.....


Peut-être que ça sera utile. Je n'ai pas regardé votre code.
Les fonctions de 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:
Bon après-midi. J'ai une question pour vous.... J'entre par stochastique (5,14,3) et je sors par stochastique seulement avec une autre période (5,3,3). Je ne comprends pas comment je peux utiliser la stochastique pour la sortie, mais pas pour le signal de retour ?

Je ne créerais pas un tableau de tickets à fermer, mais dans la boucle d'énumération des ordres du marché, je vérifierais chaque ordre en envoyant son ticket à l'entrée de la fonction de fermeture avec une vérification des conditions possibles.

 
L'offre peut-elle être égale à 0 à tout moment ?
 
YOUNGA:
L'offre peut-elle être égale à 0 à tout moment ?
Est-ce difficile à vérifier, ou paresseux ? Il est plus facile de poser la question. Le prix de l'offre peut-il être nul ? C'est possible si rien n'est vendu8-(
 
drknn:

La formulation est très bonne. Ce que l'auteur de la question demande...


il existe des scripts qui ouvrent simultanément la vente d'un symbole sur le second achat.

Je suis intéressé par un script qui peut ouvrir simultanément une vente/achat sur 7-10 symboles, avec un volume spécifié pour chaque symbole, aux prix actuels.

Exemple :

vendre EURUSD 1

acheter GBPUSD 1.5

vendre USDCAD 1.2

acheter AUDUSD 1.1

acheter NZDUSD 2

acheter USDCHF 3

Le script MultiOrders est presque parfait, seulement il y a 5 champs pour les symboles.