거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Twitter에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
Experts

KSQ CommandCenter Remote Google Sheets Trade Manager - MetaTrader 5용 expert

조회수:
465
평가:
(2)
게시됨:
업데이트됨:
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

What ideas is the code based on?

The KSQ Command Center was developed to solve a specific problem for quantitative fund managers: the need to monitor and manage remote funded accounts (such as prop firms or Darwinex allocations, PAM, MAM) from a mobile browser, without the latency or hassle of logging into a VPS.




It acts as a two-way asynchronous bridge between MetaTrader 5 and Google Sheets.

  • The Push (Reporting): It packages live account data (Balance, Equity, Margin) and open position metrics into a JSON payload and securely pushes it to a Google Apps Script Web App via HTTP POST.

  • The Pull (Commanding): It polls a specific "Commands" tab in the Google Sheet. If a user queues a command, the EA parses the JSON instruction, executes the trade modifications (e.g., closing positions, moving stop losses), and reports the success/failure status back to the sheet.

Suitable Symbol and Timeframe

Because this is a global trade management utility and not a chart-based indicator, it is Symbol and Timeframe independent.

  • Symbol: Any (Can be attached to a single major pair like EURUSD, and it will manage the entire account).

  • Timeframe: Any (H1 or higher is recommended simply to minimize chart rendering resources on your VPS).

External Variables Description

  • GoogleSheetWebAppURL: The deployment URL of your Google Apps Script.

  • SheetPassword: A custom security string to prevent unauthorized POST requests to your sheet. This must match the password in your JavaScript backend.

  • DataPushInterval (Seconds): How frequently the EA sends your live balance and open position data to update the Google Sheet Dashboard.

  • CommandPullInterval (Seconds): How frequently the EA checks the Google Sheet for new pending commands.

  • SlippagePoints: Maximum allowed slippage for remote execution.

  • EnableLogging: Set to true to see detailed two-way communication logs in the MT5 Experts tab.


⚠️ CRITICAL SETUP INSTRUCTIONS FOR USERS

This EA communicates securely with Google servers. MT5 will block it by default unless you explicitly allow the connection.

Step 1: Whitelist the WebRequest URLs

  1. In MT5, press Ctrl + O (Tools -> Options).

  2. Go to the Expert Advisors tab.

  3. Check the box for "Allow WebRequest for listed URL".

  4. Add these two exact URLs:

    • https://script.google.com

    • https://script.googleusercontent.com

Step 2: Install the Google Sheets Backend (Auto-Setup)

This EA requires a Google Apps Script to function as the "brain."

  1. Create a blank Google Sheet.

  2. Click Extensions > Apps Script.

  3. Paste the JavaScript code provided at the bottom of this description.

  4. Click Deploy > New Deployment (Select Web App, Execute as "Me", Access: "Anyone").

  5. Copy the Web App URL and paste it into the EA's GoogleSheetWebAppURL input parameter in MT5.

  6. Magic Setup: Within 60 seconds of attaching the EA, the script will automatically format your blank Google Sheet, build the Dashboard, and set up the Commands tab.


Google Apps Script Backend Code 

// =========================================================================
// KSQuants Command Center Backend (Auto-Building Version)
// =========================================================================

const PASSWORD = "Secret"; // MUST match the SheetPassword in your MT5 EA

function doPost(e) {
  try {
    var payload = JSON.parse(e.postData.contents);
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    
    // 0. Auto-Setup: Build tabs and headers if they don't exist
    ensureSetup(ss);
    
    // 1. Authenticate
    if (payload.password !== PASSWORD) {
      return createJsonResponse({ error: "Authentication Failed: Incorrect Password" });
    }
    
    // 2. Route the Request
    if (payload.action === 'status_update') {
      return handleStatusUpdate(payload, ss);
    } 
    else if (payload.action === 'get_commands') {
      return handleGetCommands(payload, ss);
    } 
    else if (payload.action === 'mark_command_done') {
      return handleMarkCommandDone(payload, ss);
    }
    
    return createJsonResponse({ error: "Unknown action requested" });
    
  } catch (error) {
    return createJsonResponse({ error: "Server Error: " + error.message });
  }
}

// -------------------------------------------------------------------------
// THE MAGIC: Auto-Build Function
// -------------------------------------------------------------------------
function ensureSetup(ss) {
  // 1. Setup Dashboard Tab
  var dashSheet = ss.getSheetByName("Dashboard");
  if (!dashSheet) {
    // Try to rename the default 'Sheet1' instead of making a new one
    var sheet1 = ss.getSheetByName("Sheet1");
    if(sheet1) {
      sheet1.setName("Dashboard");
      dashSheet = sheet1;
    } else {
      dashSheet = ss.insertSheet("Dashboard");
    }
    // Clear it just in case
    dashSheet.clear();
  }

  // 2. Setup Commands Tab
  var cmdSheet = ss.getSheetByName("Commands");
  if (!cmdSheet) {
    cmdSheet = ss.insertSheet("Commands");
    
    // Insert the required headers automatically
    var headers = [["Row", "Status", "Account", "Symbol", "Command", "TargetValue", "MT5 Feedback", "Time Completed"]];
    var headerRange = cmdSheet.getRange("A1:H1");
    
    headerRange.setValues(headers);
    headerRange.setFontWeight("bold");
    headerRange.setBackground("#d9ead3"); // Light green background
    
    // Freeze the top row so scrolling is easier
    cmdSheet.setFrozenRows(1);
    
    // Resize columns for better readability
    cmdSheet.setColumnWidth(2, 100); // Status
    cmdSheet.setColumnWidth(5, 150); // Command
    cmdSheet.setColumnWidth(7, 300); // MT5 Feedback
  }
}

// -------------------------------------------------------------------------
// ROUTE 1: Handle Status Updates (Push from MT5)
// -------------------------------------------------------------------------
function handleStatusUpdate(data, ss) {
  var dashSheet = ss.getSheetByName("Dashboard");

  // Update Account Metrics (Top Left)
  var accountData = [
    ["KSQuants Command Center", "Live Data"],
    ["Last Sync", new Date().toLocaleString()],
    ["Account Login", data.account.login],
    ["Balance", "$" + data.account.balance],
    ["Equity", "$" + data.account.equity],
    ["Margin Level", data.account.margin_level + "%"]
  ];
  dashSheet.getRange("A1:B6").setValues(accountData);
  dashSheet.getRange("A1:B1").setFontWeight("bold").setBackground("#d9ead3");

  // Update Open Positions (Right Side)
  dashSheet.getRange("D1:H500").clearContent(); 
  
  var headers = ["Ticket", "Symbol", "Type", "Volume", "Profit"];
  dashSheet.getRange("D1:H1").setValues([headers]).setFontWeight("bold").setBackground("#cfe2f3");

  if (data.positions && data.positions.length > 0) {
    var posData = data.positions.map(function(p) {
      return [p.ticket, p.symbol, p.type, p.volume, p.profit];
    });
    dashSheet.getRange(2, 4, posData.length, 5).setValues(posData);
  } else {
    dashSheet.getRange("D2").setValue("No Open Positions");
  }

  return createJsonResponse({ status: "success", message: "Dashboard updated" });
}

// -------------------------------------------------------------------------
// ROUTE 2: Send Pending Commands (Pull from MT5)
// -------------------------------------------------------------------------
function handleGetCommands(data, ss) {
  var cmdSheet = ss.getSheetByName("Commands");
  if (cmdSheet.getLastRow() < 2) return createJsonResponse([]); 

  var reqAccount = String(data.account);
  var values = cmdSheet.getRange(2, 1, cmdSheet.getLastRow() - 1, 6).getValues();
  var pendingCommands = [];

  for (var i = 0; i < values.length; i++) {
    var status = String(values[i][1]).toUpperCase();
    var acc = String(values[i][2]);

    if (status === "PENDING" && acc === reqAccount) {
       pendingCommands.push({
         row: i + 2,
         account: acc,
         symbol: String(values[i][3]),
         command: String(values[i][4]).toUpperCase(),
         targetValue: Number(values[i][5]) || 0
       });
    }
  }
  return createJsonResponse(pendingCommands);
}

// -------------------------------------------------------------------------
// ROUTE 3: Mark Commands as Done (Acknowledge from MT5)
// -------------------------------------------------------------------------
function handleMarkCommandDone(data, ss) {
  var cmdSheet = ss.getSheetByName("Commands");
  var row = data.row;
  var status = data.status;   
  var details = data.details; 

  cmdSheet.getRange(row, 2).setValue(status); 
  cmdSheet.getRange(row, 7).setValue(details); 
  cmdSheet.getRange(row, 8).setValue(new Date().toLocaleString()); 
  
  if(status === "SUCCESS") {
     cmdSheet.getRange(row, 2).setBackground("#d9ead3"); 
  } else {
     cmdSheet.getRange(row, 2).setBackground("#f4cccc"); 
  }

  return createJsonResponse({ status: "cleared" });
}

// -------------------------------------------------------------------------
// Utility Function
// -------------------------------------------------------------------------
function createJsonResponse(jsonObject) {
  return ContentService.createTextOutput(JSON.stringify(jsonObject))
    .setMimeType(ContentService.MimeType.JSON);
}


ASQ Command Desk ASQ Command Desk

ASQ CommandDesk is a professional order management panel for manual traders on MetaTrader 5. You make the trading decisions — CommandDesk handles execution, risk control, and exit management automatically.

ASQ Candle Scanner ASQ Candle Scanner

On-chart candle analysis indicator with structure tags, sentiment, and trend arrows for MetaTrader 5.

ATR Based Stop Loss Manager ATR Based Stop Loss Manager

A comprehensive stop-loss and trade management module offering multiple stop-loss methods (Fixed Pips, ATR-based, Swing High/Low, and Percentage) and trailing stop options (Fixed, ATR, Step, and Breakeven). It includes automatic broker stop-level adjustment, risk-reward–based take profit calculation, and visual stop-loss lines on the chart. The code follows a clean, structured architecture with a dedicated `CStopLossManager` class, standardized enums and structures, and fully documented English comments for clarity and maintainability.

Hon APS Advanced Pattern Scanner with DOM and  News Integration Hon APS Advanced Pattern Scanner with DOM and News Integration

Hon-APS (Advanced Pattern Scanner) is a sophisticated, open-source Expert Advisor for MT5. Unlike typical retail bots relying on lagging indicators, Hon-APS trades structural breakouts backed by quantitative Order Flow algorithms. It actively scans for classical chart patterns (e.g., Head & Shoulders, Bottoms, Triangles) and validates entries using L2 Order Book absorption and bid/ask imbalances. Complete with a polished on-chart UI, true Kelly Criterion risk management, and a robust macroeconomic news scraper, it's designed for prop-firm viability and high-end capital preservation.