A PHP Package that let you seamlessly perform api call to Metapapi https://metaapi.cloud/ NOTE: This package does not include all api calls in Metapi. You can do CopyTrade, Account Managment and Metrics.
To install the SDK in your project you need to install the package via composer:
composer require victorycodedev/metaapi-cloud-php-sdkYou can create an instance of the SDK like so for Account Management:
use Victorycodedev\MetaapiCloudPhpSdk\AccountApi;
$account = new AccountApi('AUTH_TOKEN');All methods throws exceptions when the request is not successful, so be sure to put your code in a try and catch block.
when statusCode >= 200 && statusCode < 300;You can add a trading account and starts a cloud API server for the trading account like so:
try {
return $account->create([
"login" => "123456",
"password" => "password",
"name" => "testAccount",
"server" => "ICMarketsSC-Demo",
"platform" => "mt5",
"magic" => 123456
]);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}if the request was successful , you will get the the account id and state, else an Exception will be thrown
[
"id" => "1eda642a-a9a3-457c-99af-3bc5e8d5c4c9",
"state" => "DEPLOYED"
]You can read an account by the id
try {
return $account->readById("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}You can read all trading accounts in your metaapi account
try {
return $account->readAll();
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}You can update an account
try {
return $account->update("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9",[
"password" => "password",
"name" => "testAccount",
"server" => "ICMarketsSC-Demo",
]);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}Undeploy an account
try {
return $account->unDeploy("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9");
// you can pass other parameters
return $account->unDeploy("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9", false);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}Deploy an account
try {
return $account->deploy("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9");
// you can pass other parameters
return $account->deploy("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9", false);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}Redeploy an account
try {
return $account->reDeploy("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9");
// you can pass other parameters
return $account->reDeploy("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9", false);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}Delete an account
try {
return $account->delete("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9");
// you can pass other parameters
return $account->delete("1eda642a-a9a3-457c-99af-3bc5e8d5c4c9", true);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}You can create an instance of the SDK like so for Copyfactory:
use Victorycodedev\MetaapiCloudPhpSdk\CopyFactory;
$copyfactory = new CopyFactory('AUTH_TOKEN');To generate a strategy id
try {
return $copyfactory->generateStrategyId();
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To get all your strategies
try {
return $copyfactory->strategies();
//you can also pass in other parameters like so
return $copyfactory->strategies(includeRemoved: true, limit: 1000, offset: 0 );
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To get a single strategy
try {
return $copyfactory->strategy("strategid");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To update a strategy
try {
return $copyfactory->updateStrategy("strategid", [
"name" => "Test strategy",
"description" => "Some useful description about your strategy",
"accountId" => "105646d8-8c97-4d4d-9b74-413bd66cd4ed"
]);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To remove a strategy
try {
return $copyfactory->removeStrategy("strategid");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To get all your subscribers
try {
return $copyfactory->subscribers();
//you can also pass in other parameters like so
return $copyfactory->subscribers(includeRemoved: true, limit: 1000, offset: 0 );
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To get a subscriber
try {
return $copyfactory->subscriber("subscriberiId");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To update a subscriber data
try {
return $copyfactory->updateSubscriber("subsciberId", [
'name' => "Copy Trade Subscriber",
'subscriptions' => [
[
'strategyId' => 'dJZq',
'multiplier' => 1,
]
]
]);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To remove a subscriber
try {
return $copyfactory->removeSubscriber("subsciberId");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To delete a subscription
try {
return $copyfactory->deleteSubscription("subsciberId", "strategyId");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To Copy a trade from provider to subscriber. I recommend you create a strategy before hand and save to your database before you perform a copy trade, but its not compulsory as the package will create one for you. You can always read all your strategies in your account with the " $copyfactory->strategies()".
To Copy trade do:
try {
$strategyId = "yd24";
$providerAccountId = "Enter your provider account ID";
$subAccountId = "Enter Subscriber Account ID";
return $copyfactory->copy($providerAccountId, $subAccountId, $strategyId);
/*
* You can ommit the strategy Id and just copy the trade
* The package will create a strategy as part of the copy process.
*/
return $copyfactory->copy($providerAccountId, $subAccountId);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}Note: copying a trade will take some seconds to finish, you you can have a loading indicator as feedback.
You can get metrics for you account
You can create an instance of the SDK like so for MetaStats:
use Victorycodedev\MetaapiCloudPhpSdk\MetaStats;
$stats = new MetaStats('AUTH_TOKEN');To get metrics:
try {
return $stats->metrics("accountId");
// You can pass a boolean as second parameter if you want to include open positions in your metrics
return $stats->metrics("accountId", true);
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}To get open trades for MetaApi account:
try {
return $stats->openTrades("accountId");
} catch (\Throwable $th) {
$response = json_decode($th->getMessage());
return $response->message;
}composer testAll API references can be found on Metaapi documentation website. https://metaapi.cloud/
If you discover any security related issues, please open an issue.
Pull requests are welcome.
Why not star the github repo? I'd love the attention! you can share the link for this repository on Twitter or HackerNews?
Don't forget to follow me on twitter!
Thanks! Efekpogua Victory.
The MIT License (MIT). Please see License File or more information.