what is your suggestion for a crypto arbitrage system that connects with several crypto exchangers?
Exchange API logical. Isn't it?
Ow , well you could use mql5 too for APIs , plus , built in chart stuff .
Node.js for the Dex option unless someone ports a web3 library on mql5
You probably have seen this dude :
you can also test stuff with a js script in notepad , and run it as a website .(for the Binance Smart Chain)
Here is a simple example from 2 years ago thought that reads dogecoin on bsc (bep-20 token)
<!DOCTYPE> <html> <head> <style> input.address,input.address_valid,input.address_invalid { background-color:rgb(200,200,230); border-color:rgb(140,140,200); border-radius:5px 5px 5px 5px; border-style:solid; width:80%; height:2em; } input.address_valid { border-color:rgb(50,150,50); background-color:rgb(100,255,100); } input.address_invalid { border-color:rgb(150,50,50); background-color:rgb(255,100,100); } input.navegante_button { border-style:solid; border-color:rgb(150,150,50); background-color:rgb(190,190,90); border-radius:5px 5px 5px 5px; width:10%; height:2em; } input.navegante_button:hover{background-color:rgb(210,210,110);border-color:rgb(160,160,60);} textarea.navegante_results { background-color:rgb(160,210,100); border-color:rgb(100,160,50); width:90%; resize:none; } </style> <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script> <script type="text/javascript"> var bsc="https://bsc-dataseed.binance.org"; var baseABI=[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]; var web3=null,working_contract=null,working_token_address=null; var resultRows=0; //check the validity of an address ,return t/f , and style accordingly function CheckAddressValidity(element){ if(element.value.length==42){ element.classList.remove("address"); element.classList.remove("address_invalid"); element.classList.add("address_valid"); return(true); } console.log("Invalid"); element.classList.remove("address"); element.classList.remove("address_valid"); element.classList.add("address_invalid"); return(false); } //check textarea height function reHeight(element,rows){ if(element!=null){ rows++; element.style.height=(rows*2).toString()+"em"; return(rows); }} function updateResultsTextarea(element,results_text,rows){ element.innerHTML=results_text;rows=reHeight(element,rows); return(rows); } //get BEP20 Token Basics async function getTokenBasics(id_of_response_textarea,id_of_token_address_input){ //if token address input valid var inpElement=document.getElementById(id_of_token_address_input); var resElement=document.getElementById(id_of_response_textarea); //normal operation if(inpElement!=null&&resElement!=null){ //check if the address is valid - for now the draft version is if its 42 characters long (string) //there should be a more robust way -will investigate //valid token address length wise if(CheckAddressValidity(inpElement)) { //check basics (web3) if(web3==null) { web3=new Web3(bsc); if(web3==null){alert("Web3 Null");} } //using standard erc20/bep20 abi for getting info if(web3!=null){ working_token_address=inpElement.value; working_contract=new web3.eth.Contract(baseABI,working_token_address); if(working_contract==null){alert("Null Contract");} else{ var okay=false; var transport=null,transport_error=null; resultRows=0; var results="Contract : "+working_token_address+"\n"; //NAME try{okay=true;transport=await working_contract.methods.name().call();}catch(e){console.log("E=>"+e);okay=false;} if(okay){results+="Name : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);} //SYMBOL try{okay=true;transport=await working_contract.methods.symbol().call();}catch(e){console.log("E=>"+e);okay=false;} if(okay){results+="\nSymbol : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);} //DECIMALS try{okay=true;transport=await working_contract.methods.decimals().call();}catch(e){console.log("E=>"+e);okay=false;} if(okay){results+="\nDecimals : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);} //TOTAL SUPPLY try{okay=true;transport=await working_contract.methods.totalSupply().call();}catch(e){console.log("E=>"+e);okay=false;} if(okay){results+="\nTotal Supply : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);} //OWNER var haveOwner=false; try{okay=true;haveOwner=true;transport=await working_contract.methods.owner().call();}catch(e){console.log("E=>"+e);okay=false;haveOwner=false;} if(okay){results+="\nOwner : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);} //GET OWNER if(!haveOwner){ try{okay=true;haveOwner=true;transport=await working_contract.methods.getOwner().call();}catch(e){console.log("E=>"+e);okay=false;haveOwner=false;} if(okay){results+="\nOwner : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);}} //_OWNER if(!haveOwner){ try{okay=true;haveOwner=true;transport=await working_contract.methods._owner().call();}catch(e){console.log("E=>"+e);okay=false;haveOwner=false;} if(okay){results+="\nOwner : "+transport;resElement.innerHTML=results;resultRows=reHeight(resElement,resultRows);}} }} }else {alert("Invalid Address Length");}//invalid token address length wise } //errors in ids of elements else{ var errmsg="error : "; if(inpElement==null){errmsg+=" Invalid Input Element ID //";} if(resElement==null){errmsg+=" Invalid Result Element ID //";} alert(errmsg); } return(false); } </script> </head> <body> <h1>navegante:token_basics</h1><hr> <span> Enter Token Address : <br> <input class="address" type="input" id="tokenAddress" value="0xba2ae424d960c26247dd6c32edc70b295c744c43" onchange="CheckAddressValidity(this)"/> <input class="navegante_button" type="button" id="tokenRead" value="read" onclick="getTokenBasics('resultsLog','tokenAddress')"/> </span><br><hr> <span> Response: <br> <textarea readonly="true" wrap="off" class="navegante_results" id="resultsLog"></textarea> </span><br><hr> </body> </html>
and the token bscscan page : https://bscscan.com/token/0xba2ae424d960c26247dd6c32edc70b295c744c43
Ow , well you could use mql5 too for APIs , plus , built in chart stuff .
Node.js for the Dex option unless someone ports a web3 library on mql5
You probably have seen this dude :
you can also test stuff with a js script in notepad , and run it as a website .(for the Binance Smart Chain)
Here is a simple example from 2 years ago thought that reads dogecoin on bsc (bep-20 token)
and the token bscscan page : https://bscscan.com/token/0xba2ae424d960c26247dd6c32edc70b295c744c43
Thanks. Appreciate your help. Will check them out.
Great suggestion bro.
I agree with you but a customer proposed to do this and I started this thread for more investigation.
-
API Integration: First, you will need to integrate the APIs of the crypto exchanges you want to trade on. This will allow your app to retrieve real-time market data and execute trades automatically.
-
Price Analysis: Once you have integrated the APIs, your app will need to analyze the prices of various cryptocurrencies across different exchanges. You can use algorithms to identify price discrepancies and potential arbitrage opportunities.
-
Risk Management: In any trading activity, it is important to manage risks effectively. Your app should be designed to minimize the risks associated with arbitrage trading, such as slippage and volatility. You can implement various risk management strategies like stop-loss and take-profit orders to ensure that your trades are executed at the best possible prices.
Thanks for the thorough explanation.
-
API Integration: First, you will need to integrate the APIs of the crypto exchanges you want to trade on. This will allow your app to retrieve real-time market data and execute trades automatically.
-
Price Analysis: Once you have integrated the APIs, your app will need to analyze the prices of various cryptocurrencies across different exchanges. You can use algorithms to identify price discrepancies and potential arbitrage opportunities.
-
Risk Management: In any trading activity, it is important to manage risks effectively. Your app should be designed to minimize the risks associated with arbitrage trading, such as slippage and volatility. You can implement various risk management strategies like stop-loss and take-profit orders to ensure that your trades are executed at the best possible prices.
Appreciated!

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello everyone.
Do you think python is good enough for this purpose?