[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 45
Pouvez-vous me dire si j'ai mis"mn" dans le code correctement ou non ?
//+----------------------------------------------------------------------------------------+//| ММ Функция работает по принципу наращивания лота при увеличении |//| депозита, и уменьшении лота при серии убыточных сделок лот возвращается |//| на начальный лот в данном случае 0.1 если происходит профит то следующий |//| лот расчитывается по прогресии. |//| К примеру при депозите 500 старт лота будет равен 0.1 далее депозит |//| увеличивается до 5000 лот будет равен 1 если будет две убыточные сделки |//| лот уменьшится от предыдущего деленое на DecreaseFactor = 3, если по далее |//| две сделки будут убыточные,уменьшится от предыдущего деленое на DecreaseFactor = 3, |//| далее если сделка будет прибыльной то следующий лот откроется из расчета |//| баланса депозита "баланс/500*0.1"=лот внешние переменные |//+----------------------------------------------------------------------------------------+double LotsOptimized() {
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double lot = Lots;
int orders = OrdersHistoryTotal();
int losses = 0;
lot = NormalizeDouble((AccountFreeMargin()- AccountCredit()) * MaximumRisk / balans, 2);
if (DecreaseFactor > 0.0) {
for (int i = orders - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
Print("Error in history!");
break;
}
if (OrderSymbol() != Symbol() || OrderType() > OP_SELL || OrderMagicNumber()!=mn) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}
if(lot < minlot) lot = minlot;
if(lot > maxlot) lot = maxlot;
return (lot);}
Comment faire : je dois définir un nouvel ordre au bon niveau après avoir fermé un ordre particulier. J'ai essayé de l'écrire comme ça, ça ne s'ouvre pas... Comment l'écrire correctement ?
//-- Открытие ордеров после закрытияif (OrderSelect(Ticket_B,SELECT_BY_TICKET,MODE_TRADES)==false)
{Ticket_B=0;}
if (OrderSelect(Ticket_B_1,SELECT_BY_TICKET,MODE_TRADES)==false)
{Ticket_B_1=0;}
if (OrderSelect(Ticket_B_2,SELECT_BY_TICKET,MODE_TRADES)==false)
{Ticket_B_2=0;}
...
if (Ticket_B==0) // в этом месте пробовал и (Ticket_B<1), тоже никак
{
SL=Bid - New_Stop(StopLoss)*Point;
TP=Ask + New_Stop(TakeProfit)*Point;
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket_B=OrderSend(Symbol(),OP_BUY,Lts,Ask,1,SL,TP,"121212",121212,0,CLR_NONE);
if (Ticket_B > 0)
{
Alert ("Открыт ордер Buy ",Ticket_B);
OrderSelect(Ticket_B,SELECT_BY_TICKET,MODE_TRADES);
one_price=OrderOpenPrice();
if (Fun_Error(GetLastError())==1)
continue;
return;
}
}
//-- Открытие ордеров -- BuyStopif (Up>=1 && Ticket_B_1<1)
{
SL_1=SL;
TP_1=one_price + StepUp*Point + New_Stop(TakeProfit)*Point;
Ticket_B_1=OrderSend(Symbol(), OP_BUYSTOP, Lts, one_price + StepUp*Point, 1, SL_1, TP_1,"121212",121212,0,CLR_NONE);
{
Alert("Торговый приказ B2 отправлен на сервер. Ожидание ответа..");
if (Ticket_B_1>0)
{
Alert ("Установлен ордер BuyStop ",Ticket_B_1);
}
}
}
J'ai besoin de l'aide d'un professionnel (quelqu'un qui connaît ce genre de choses...).
Je n'arrive pas à faire fonctionner l'idée... J'ai tout trouvé et mis dans le robot mais ça ne fonctionne toujours pas comme ça =(
Je veux fermer tous les profits.
Je veux fermer toutes les positions rentables lorsque la rentabilité totale est supérieure à la perte totale. J'essaie de fermer toutes les positions rentables (Profits > Pertes).
Aide avec le code. La condition (Profit total>Perte totale) pour fermer toutes les transactions rentables ne fonctionne pas.
J'ai besoin qu'il compte les transactions perdantes à partir du moment du "solde maximum" pour fermer toutes les transactions rentables dès qu'elles atteignent un profit supérieur à la perte totale, et recommencer à compter les transactions perdantes avec le nouveau dépôt.
Quelqu'un a-t-il vu un conseiller expert qui garde la trace d'un solde de dépôt, par exemple, une transaction a commencé avec un solde de 50... les pertes ont commencé, le conseiller expert devrait se souvenir de combien le solde a baissé, de sorte que la prochaine fois que le bénéfice des positions ouvertes dépasse cette perte, il devrait fermer toutes les transactions rentables, et recommencer à compter les pertes.
if (GetProfitOpenPosInCurrency()>NumberOfLossPosToday())
int slippage=1;
int ask, bid, open;
double point;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUY)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point==0) break;
bid=MathRound(MarketInfo(OrderSymbol(),MODE_BID)/point);
open=MathRound(OrderOpenPrice()/point);
if (bid-open<Profit) continue;
OrderClose(OrderTicket(),OrderLots(),bid*point,slippage);
}
if (OrderType()==OP_SELL)
{
point=MarketInfo(OrderSymbol(),MODE_POINT);
if (point==0) break;
ask=MathRound(MarketInfo(OrderSymbol(),MODE_ASK)/point);
open=MathRound(OrderOpenPrice()/point);
if (open-ask<Profit) continue;
OrderClose (OrderTicket(),OrderLots(),ask*point,slippage);
}
}
}
//--------------------------------------------------------------------double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
double p=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=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(p);
}
//--------------------------------------------------------------------int NumberOfLossPosToday(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersHistoryTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
t=OrderCloseTime();
if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
if (OrderProfit()<0) kp++;
}
}
}
}
}
}
}
return(kp);
}
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Pouvez-vous me dire si j'ai mis"mn" dans le code correctement ou non ?
Veuillez suggérer une "condition" temporelle pour que l'EA s'active à une certaine heure, que je puisse définir.
Veuillez me dire si j'ai ajouté"mn" au code correctement ou non, afin que le numéro Magic puisse être suivi dans MM ?
Si Magic est déclaré comme variable globale ou constante :
int mn = ****;et donc structurellement sans erreurs (petite modification de syntaxe) :
Vous devez normaliser le lot par la multiplicité MODE_LOTSTEP, sinon vous tomberez tôt ou tard sur l'erreur 131 (ERR_INVALID_TRADE_VOLUME).
Eh bien, et les variables non déclarées dans la fonction sur votre conscience... :)
Bonjour,
J'ai besoin de l'aide d'un professionnel (quelqu'un qui connaît ce genre de choses...).
Je n'arrive pas à faire fonctionner l'idée... J'ai tout trouvé et mis dans le robot mais ça ne fonctionne toujours pas comme ça =(
Je veux fermer tous les profits.
Je veux fermer toutes les positions rentables lorsque la rentabilité totale est supérieure à la perte totale. J'essaie de fermer toutes les positions rentables (Profits > Pertes).
Aide avec le code. La condition (Profit total>Perte totale) pour fermer toutes les transactions rentables ne fonctionne pas.
J'ai besoin qu'il compte les transactions perdantes à partir du moment du "solde maximum" pour fermer toutes les transactions rentables dès qu'elles atteignent un profit supérieur à la perte totale, et recommencer à compter les transactions perdantes avec le nouveau dépôt.
Quelqu'un a-t-il vu un conseiller expert qui garde la trace d'un solde de dépôt, par exemple, une transaction a commencé avec un solde de 50... les pertes ont commencé, le conseiller expert devrait se souvenir de combien le solde a baissé, de sorte que la prochaine fois que le bénéfice des positions ouvertes dépasse cette perte, il devrait fermer toutes les transactions rentables, et recommencer à compter les pertes.
Comment puis-je savoir si les dernières commandes 1-2-3 ont été perdues ?
Comment puis-je savoir quelle a été la dernière commande ?
Par exemple, j'ai besoin de savoir si une limite d'achat en attente s'est déclenchée et, si c'est le cas, à quel prix, puis d'en placer une nouvelle.
Comment savoir si l'ordre s'est déclenché sur un stop suiveur, puis placer un nouvel ordre après le déclenchement du stop suiveur ?