ещё полезняшка

7 января 2025, 16:09
Maxim Kuznetsov
1
47

С праздником !

небольшая полезняшка вам в помощь: скрипт закрывает позицию по инструменту (все позиции), но только при наличии должного (покрывающего выплаченные спреды) профита

можно повесить на хоткей или запускать из менюшек. 

используя скрипт торговать будете более в свою пользу чем в карман DC

#property copyright "Maxim Kuznetsov (c) 2024"
#property link      "https://luxtrade.unaux.com"
#property version   "1.00"

#include <fxsaber/MT4Orders.mqh>
#define ticket_t ulong

#include <nektomk/Algo.mqh>

void OnStart()
{
   int total=OrdersTotal();
   ticket_t COLLECT[];
   ArrayResize(COLLECT,0,total/2);
   double totalProfit=0.0;
   for(int pos=total-1;pos>=0;pos--) {
      if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {
         Sleep(20);
         if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {
            Alert("OrderSelect failed - pls.restart");
            return;
         }
      }
      if (OrderCloseTime()!=0) continue;
      if (OrderSymbol()!=_Symbol) continue;
      int type=OrderType();
      if (type!=OP_BUY && type!=OP_SELL) continue;
      totalProfit=OrderProfit()+OrderSwap()+OrderCommission()*2;
      double spreadLoss=OrderLots()*SymbolInfoInteger(_Symbol,SYMBOL_SPREAD)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);
      totalProfit-=spreadLoss*3;
      ArrayPush(COLLECT,(ticket_t)OrderTicket());
   }
   PrintFormat("TotalProfit=%f",totalProfit);
   if (totalProfit>0.0) {
      for(int pass=0;pass<10;pass++) {
         bool haveError=false;
         for(int pos=ArraySize(COLLECT)-1;pos>=0;pos--) {
            ticket_t ticket=COLLECT[pos];
            if (ticket==0) continue;
            if (!OrderSelect(ticket,SELECT_BY_TICKET)) {
               Sleep(20);
               if (!OrderSelect(ticket,SELECT_BY_TICKET)) {
                  haveError=true;
               }
            }
            if (OrderCloseTime()!=0) continue;
            if (!OrderClose(ticket,OrderLots(),OrderClosePrice(),0)) {
               haveError=true;
            } else {
               COLLECT[pos]=0;
            }
         }
         if (!haveError) break;
      }
   }
}




Файлы: