Yes there is but its complicated. Create a relationship in studio between two modules you know its working on then look in:
custom/Extension/modules/YOUR MODULE/Ext/Vardefs/
and you will see a file with a name made up of the two modules. Look in that for an example.
Here is an example of a custom relationship I created:
custom/Extension/modules/sa_AuthorizeNet_Transactions/Ext/Vardefs/sa_authorizenet_transactions_accounts_sa_AuthorizeNet_Transactions.php
$dictionary["sa_AuthorizeNet_Transactions"]["fields"]["sa_authorizenet_transactions_accounts"] = array (
'name' => 'sa_authorizenet_transactions_accounts',
'type' => 'link',
'relationship' => 'sa_authorizenet_transactions_accounts',
'source' => 'non-db',
'module' => 'Accounts',
'bean_name' => 'Account',
'vname' => 'LBL_SA_AUTHORIZENET_TRANSACTIONS_ACCOUNTS_FROM_ACCOUNTS_TITLE',
'id_name' => 'sa_authorizenet_transactions_accountsaccounts_ida',
);
$dictionary["sa_AuthorizeNet_Transactions"]["fields"]["sa_authorizenet_transactions_accounts_name"] = array (
'name' => 'sa_authorizenet_transactions_accounts_name',
'type' => 'relate',
'source' => 'non-db',
'vname' => 'LBL_SA_AUTHORIZENET_TRANSACTIONS_ACCOUNTS_FROM_ACCOUNTS_TITLE',
'save' => true,
'id_name' => 'sa_authorizenet_transactions_accountsaccounts_ida',
'link' => 'sa_authorizenet_transactions_accounts',
'table' => 'accounts',
'module' => 'Accounts',
'rname' => 'name',
);
$dictionary["sa_AuthorizeNet_Transactions"]["fields"]["sa_authorizenet_transactions_accountsaccounts_ida"] = array (
'name' => 'sa_authorizenet_transactions_accountsaccounts_ida',
'type' => 'link',
'relationship' => 'sa_authorizenet_transactions_accounts',
'source' => 'non-db',
'reportable' => false,
'side' => 'right',
'vname' => 'LBL_SA_AUTHORIZENET_TRANSACTIONS_ACCOUNTS_FROM_SA_AUTHORIZENET_TRANSACTIONS_TITLE',
);
Then in custom/Extension/modules/Accounts/Ext/Vardefs/sa_authorizenet_transactions_accounts_Accounts.php
// created: 2016-01-28 15:15:14
$dictionary["Account"]["fields"]["sa_authorizenet_transactions_accounts"] = array (
'name' => 'sa_authorizenet_transactions_accounts',
'type' => 'link',
'relationship' => 'sa_authorizenet_transactions_accounts',
'source' => 'non-db',
'module' => 'sa_AuthorizeNet_Transactions',
'bean_name' => false,
'side' => 'right',
'vname' => 'LBL_SA_AUTHORIZENET_TRANSACTIONS_ACCOUNTS_FROM_SA_AUTHORIZENET_TRANSACTIONS_TITLE',
);
If you can understand that then add your own custom relationship between your two moduels then do a quick repair and rebuild for it to take effect.